2014-04-24 25 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());