2017-02-10 29 views
1

我需要幫助,在Java中使用textfields更改類的屬性的值下面我有3個簡化版本的代碼來演示我遇到的問題。我在alpha,UIalpha和mainGUI類下有3個類。當我運行mainGUI類時,我需要用戶單擊窗口上的pc圖像。這將創建UIaplha對象,以打開一個新框架。此框架具有應該能夠更改mainGUI類中aplha類對象的name屬性的文本框。我的代碼工作到某個地方,我不知道如何解決它。我搜索了多次,嘗試了很多種類的東西,但都沒有爲我工作。 pc image needed在java中使用textfields更改類的詳細信息

Alpha.java

public class alpha{ 
String name; 
public void setName(String n){ 
    name=n; 
    } 
    public void print(){ 
    System.out.println("name= "+name); 
    } 
    public static void main(String[] args){ 
    alpha a=new alpha(); 
    } 
} 

mainGUI.java

import java.awt.*; // this is used to access the GridLayout class 
import java.awt.event.*; 
import javax.swing.*; 
public class mainGUI extends JComponent{ 
private static final int WIDTH = 400; 
private static final int HEIGHT = 300; 
private int PCHeight=40; 
private int PCWidth=41; 
int y=20,x=30; 
private JButton pc1button; 
private PCButtonHandler pcbHandler; 
public mainGUI(){ 
    JFrame frame=new JFrame("NETWORK EXAMPLE"); 
    ImageIcon image = new ImageIcon("pc.png"); 
    pc1button =new JButton(image); 
    ////////////////////////////////////////////////////////// 
    pc1button.setOpaque(false); 
    pc1button.setContentAreaFilled(false); 
    pc1button.setBorderPainted(false); 
    pc1button.setBounds(y,x,PCHeight,PCWidth); 
    //////////////////////////////////////////////////////// 
    pcbHandler=new PCButtonHandler(); 
    pc1button.addActionListener(pcbHandler); 
    frame.setTitle("GUI example"); 
    Container pane= frame.getContentPane(); 
    pane.setLayout(null); 
    pane.setBackground(Color.WHITE); 
    pane.add(pc1button); 
    frame.setSize(WIDTH, HEIGHT); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
public class PCButtonHandler implements ActionListener 
{ 
    String name; 
    public void actionPerformed(ActionEvent e) 
    { 
     alpha test=new alpha(); 
     test.setName("WRONG"); 
     test.print(); 
     UIalpha help=new UIalpha(test); 
     test=help.updateObjects(); 
     test.print(); 
    } 
    } 
public static void main(String[] args){ 
    mainGUI work=new mainGUI(); 
} 
} 

UIalpha.java

import java.awt.*; // this is used to access the GridLayout class 
import java.awt.event.*; 
import javax.swing.*; 
public class UIalpha extends JFrame{ 
    String Name; 
    private JLabel nameL; 
    private JTextField nameTF; 
    boolean pressed=false; 
    private JButton enterbutton=new JButton("Enter"); 
    private JFrame frame=new JFrame("PC"); 
    alpha refrence; 
    public UIalpha(alpha test){ 
    this.refrence=test; 
    nameL= new JLabel("Enter the name of alpha: ", SwingConstants.CENTER); 
    nameTF=new JTextField(10); 
    nameTF.setMaximumSize(new Dimension(500,20)); 
    enterbutton.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     refrence.setName(nameTF.getText()); 
    // test.setName(nameTF.getText()); 
     //test.print(); 
     pressed=true; 
    } 
    }); 
    Container pane= frame.getContentPane(); 
    frame.setLayout(new BoxLayout(pane,BoxLayout.PAGE_AXIS)); 
    pane.add(nameL); 
    pane.add(nameTF); 
    pane.add(enterbutton); 
    frame.setMinimumSize(new Dimension(300,200)); 
    frame.setPreferredSize(new Dimension(600,200)); 
    frame.setMaximumSize(new Dimension(660,200)); 
    frame.setVisible(true); 
    } 
    public alpha updateObjects(){ 

    return refrence; 
    } 
} 
+1

'我的代碼工作到某個地方,我不知道如何解決它'這不是很具體。什麼實際上起作用,什麼不起作用? – Deltharis

+0

所以當我按下輸入按鈕時,它會更改傳入的aplha對象。但該更改不會反射回mainGUI類中的alpha對象。什麼即時嘗試達到令人滿意的是允許用戶按下輸入按鈕,然後我可以在新聞後在mainGUI類中稍後使用更新對象。 –

回答

0

你的代碼其實大部分都是可用的。 Bah,alpha IS中的變化反映在mainGUI中。只是你試圖打印它太早 - 創建一個新的框架不會阻止。 printsPCButtonHandler都會立即發生,然後纔有機會輸入新值。如果你說,在mainGUI中添加一個新按鈕來打印alpha的當前值,你將能夠看到它改變了。

而且,因爲我在這裏:

  • Java類的名稱應該以大寫字母開頭。
  • 爲了在應用程序不斷增長時不會感到瘋狂,請使用佈局管理器(例如MigLayout)。

CNC中

一個很好的時機,嘗試做一些新的值(例如,更新整個mainGUI需要的地方),在關閉窗口會。你可以不喜歡它,在mainGUI正下方創建UIalpha:

help.addWindowListener(new WindowAdapter(){ 
       @Override 
       public void windowClosing(WindowEvent e) { 
        System.out.println("window closing"); 
        test.print(); 
       } 
      }); 

或者很好,這應該工作,當你收拾你是怎麼做UIalpha:

  • 刪除frame變量
  • 無論你打電話方法在該變量上調用它在UIalpha上(當前對象)

因爲否則,您會將該偵聽器設置在與你使用。

+0

除了一個按鈕以外,是否還有其他任何方式來查看變更是否已反映出來。我怎麼才能等到輸入按鈕被按下。我試過類似while(enterpressed == false);但這沒有給我textfeilds或按鈕。我也試圖使用一個線程,但我不明白如何使用它們,因爲在嘗試這種事情之前我只做了基本的Java。 –

+0

@DillonWaters擴大了答案 – Deltharis

+0

非常感謝你現在的工作。 –