2014-04-24 52 views

回答

1

有那麼嵌套讓您擁有它得到這實際上顯示它如一個內部的整數值類:

//Note: this is only a rough representation of the concept 
//  what I am trying to get across, it wouldn't really 
//  work like this 

class Displayer{ 
    ValueGetter valueGetter; 
    JTextField textField; 

    public Displayer(){ 
     valueGetter = new ValueGetter(); 
    } 

    public void display(){ 

     int value = valueGetter.workOutValue(); 

     textField.setText(value); 
    } 
} 
+0

這會工作,謝謝! –

0

即使你能做到這一點,你也不應該這樣做。取而代之的是,有兩個JTextField s表示兩者屬於Integer

1

你的問題是:

我怎麼會用一個JTextField在兩個班。例如從一個類獲取一個整數值並將其顯示在另一個類的textField中。

而且我會建議您以不同的角度思考這個問題。最好考慮一般問題:

一個對象如何與其他對象共享其數據及其狀態?

一個常見而有用的答案是給出第一個類,這裏​​是包含JTextField,getter方法的類,如果需要setter方法,允許其他類有能力檢索JTextField(如果需要的話甚至可以改變它)。例如,你可以給你的GUI類中的方法是這樣的:

public String getTextFieldText() { 
    return textField.getText(); 
} 

然後,你必須確保需要這些信息的類有一個有效實例的GUI類,即一個實例的顯示 GUI,然後讓它在需要來自GUI的最新信息時調用此方法。


編輯 編輯完你的問題,並有加,

從JFrame中到JFrame中

這讓我擔心,因爲它意味着你的程序使用一個以上的JFrame中。如果是這樣,請重新考慮您的程序設計,因爲它需要多個JFrame是不尋常的。如果需要顯示另一個窗口,通常這是通過顯示一個模態或非模態JDialog來完成的。如果需要更改「視圖」,通常使用CardLayout交換JPanel。


編輯2
爲了什麼,我描述了一個例子,請參閱從this answer我的代碼。這種代碼通過從一個模態的JDialog信息轉換成啓動它,準確地使用了我所提到的技術JFrame中:

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class DialogEg { 
    private static void createAndShowGUI() { 
     MainPanelGen mainPanelGen = new MainPanelGen(); 

     JFrame frame = new JFrame("DialogEg"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanelGen.getMainPanel()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
     }); 
    } 

} 

class MainPanelGen { 
    private JPanel mainPanel = new JPanel(); 
    private JTextField field = new JTextField(10); 
    private JButton btn = new JButton(new BtnActn()); 
    private JDialog dialog; 
    private DialogPanel dialogPanel = new DialogPanel(); 

    public MainPanelGen() { 
     mainPanel.add(field); 
     mainPanel.add(btn); 

     field.setEditable(false); 
     field.setFocusable(false); 
    } 

    public JPanel getMainPanel() { 
     return mainPanel; 
    } 

    private class BtnActn extends AbstractAction { 
     BtnActn() { 
     super("Button"); 
     } 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
     if (dialog == null) { 
      Window win = SwingUtilities.getWindowAncestor(mainPanel); 
      if (win != null) { 
       dialog = new JDialog(win, "My Dialog", 
        Dialog.ModalityType.APPLICATION_MODAL); 
       dialog.getContentPane().add(dialogPanel); 
       dialog.pack(); 
       dialog.setLocationRelativeTo(null); 
      } 
     } 
     dialog.setVisible(true); // here the modal dialog takes over 
     System.out.println (dialogPanel.getFieldText()); 
     field.setText(dialogPanel.getFieldText()); 
     } 
    } 
} 

class DialogPanel extends JPanel { 
    private JTextField field = new JTextField(10); 
    private JButton exitBtn = new JButton(new ExitBtnAxn("Exit")); 

    public DialogPanel() { 
     add(field); 
     add(exitBtn); 
    } 

    public String getFieldText() { 
     return field.getText(); 
    } 

    private class ExitBtnAxn extends AbstractAction { 

     public ExitBtnAxn(String name) { 
     super(name); 
     } 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
     Window win = SwingUtilities.getWindowAncestor(DialogPanel.this); 
     if (win != null) { 
      win.dispose(); 
     } 

     } 

    } 

} 

JPanel中顯示的模態的JDialog已經一個JTextField字段稱爲(適當地) field

class DialogPanel extends JPanel { 
    private JTextField field = new JTextField(10); 

而且具有一個getter方法,以允許其他類以檢查該字段的狀態:

public String getFieldText() { 
    return field.getText(); 
} 

主要GUI類,稱爲MainPanelGen攜帶稱爲dialogPanel的DialogPanel類的一個實例:

class MainPanelGen { 
    // .... etc 
    private DialogPanel dialogPanel = new DialogPanel(); 

在主GUI一個ActionListener,一個模態的JDialog創建「懶惰」,即,對話是如果JDialog變量爲空,則創建實例,然後將該實例分配給此變量。該DailogPanel對象放置在模態對話框顯示:

public void actionPerformed(ActionEvent arg0) { 
    if (dialog == null) { 
     Window win = SwingUtilities.getWindowAncestor(mainPanel); 
     if (win != null) { 
      dialog = new JDialog(win, "My Dialog", 
       Dialog.ModalityType.APPLICATION_MODAL); 
      dialog.getContentPane().add(dialogPanel); 
      dialog.pack(); 
      dialog.setLocationRelativeTo(null); 
     } 
    } 

由於對話框是模態,當顯示該對話框的主界面的代碼流凍結,並且不會重新啓動,直到對話框不再可見。因此,我們知道在對話框中調用setVisible(true)之後的所有代碼都處於假死狀態,並且只有在處理完對話框後纔會重新啓動。然後,我們查詢DialogPanel的文本框的文本和我們來說:

 dialog.setVisible(true); // here the modal dialog takes over 
    System.out.println (dialogPanel.getFieldText()); 
    field.setText(dialogPanel.getFieldText());