如何从JFrame 1获取数据到另一个JFrame?

时间:2015-02-01 09:03:45

标签: java swing jframe

在阅读了很多人发布和回答的问题后,我仍然不了解数据传递如何在Java中运行。我这里有一个简单的代码,要求用户输入他们的年龄,身高,体重和一个打开第二帧的按钮。

第一帧

public Collectdata()
{
    JPanel text = new JPanel();
    text.add(jage);
    text.add(age);
    text.add(jheight);
    text.add(height);
    text.add(jweight);
    text.add(weight);
    text.setLayout(new GridLayout(3,2));

    JPanel jbutt = new JPanel();
    jbutt.add(next);

    setLayout(new BorderLayout());
    add(text,BorderLayout.CENTER);
    add(jbutt,BorderLayout.SOUTH);

    next.addActionListener(this);
}

public static void main(String[] args)
{
    Collectdata GUI = new Collectdata();
    GUI.setTitle("DataCollection");     //Set title
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close program
    GUI.setSize(250,150);
    GUI.setVisible(true);
}

public void actionPerformed(ActionEvent a)
{
    if(a.getSource() == next)
    {
        Calculate secondwind = new Calculate(this);
        secondwind.setTitle("Calculate");       //Set title
        secondwind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //close program
        secondwind.setSize(350,150);
        secondwind.setVisible(true);
        this.setVisible(false); 
    }
}

}

这是点击按钮后显示的第二帧。

第二帧

public Calculate(Collectdata collectdata)
{
    this.collectdata = collectdata;

    JPanel text = new JPanel();
    text.add(jage);
    text.add(age);
    text.add(jheight);
    text.add(height);
    text.add(jweight);
    text.add(weight);
    text.setLayout(new GridLayout(3,2));

    age.setEditable(false);
    height.setEditable(false);
    weight.setEditable(false);

    setLayout(new BorderLayout());
    add(text,BorderLayout.CENTER);
}

我希望能够从JFrame获取键入的数据,以便能够传递给第二个JFrame并使用数据进行一些计算。

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:2)

通常,在请求/提示来自用户的信息时,您将使用某种对话框,这是一个短命的,单一用途的窗口,其作用应该是从用户收集少量信息,提出问题或提供某种信息通知。

您需要保持责任的隔离,并尽可能地尝试和解耦您的代码,例如,您的Calculate课程不应该关心如何生成信息以及您的收集类不应该&# 39;关心你将如何处理这些信息。

为此,首先创建一个自定义类,从JPanel扩展,其中包含从用户收集数据所需的所有字段...

public class UserInfoEditorPane extends JPanel {
    private JSpinner jage;
    private JSpinner jheight;
    private JSpinner jweight;

    public UserInfoEditorPane() {  
        // Set the UI as you want...
    }

    public Collectdata getUserInfo() {
        // Create a new instance of Collectdata
        // and populate it with the values from
        // the fields...
        Collectdata data = ...;
        //...
        return data;
    }
}

(我使用Collectdata作为POJO,而不是UI类)

现在,使用类似JOptionPane的内容,向用户显示面板......

UserInfoEditorPane userInfoPane = new UserInfoEditorPane();
switch (JOptionPane.showMessageDialog(null, userInfoPane, "User Info", JOptionPane.PLAIN_MESSAGE)) {
    case JOptionPane.OK_OPTION:
        Calculate secondwind = new Calculate(userInfoPane.getUserInfo());
        secondwind.setTitle("Calculate");       //Set title
        secondwind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //close program
        secondwind.pack();
        secondwind.setLocationRelativeTo(null);
        secondwind.setVisible(true);
        break;
}

有关详细信息,请参阅How to Make Dialogs