gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:01:24 27 4
gpt4 key购买 nike

在阅读了人们发布和回答的大量问题后,我仍然不明白 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 并使用该数据进行某些计算。

我该怎么做?

谢谢。

最佳答案

通常,当向用户请求/提示信息时,您会使用某种对话框,这是一个短暂的、单一用途的窗口,其工作应该是从用户那里收集少量信息,提出问题或提供某种信息通知。

您需要保持责任隔离,并尝试尽可能地解耦代码,例如,您的 Calculate 类不应该关心信息是如何生成的,而您的集合类不应该关心不在乎您将如何处理这些信息。

为此,首先创建一个自定义类,从 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了解更多详情

关于java - 如何从 JFrame 1 获取数据到另一个 JFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261115/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com