在阅读了很多人发布和回答的问题后,我仍然不了解数据传递如何在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并使用数据进行一些计算。
我该怎么做?
感谢。
答案 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