我有一个 jFrame,它有一个 jTextbox 和一个按钮。另一个 jFrame 有一个 jLabel。当按下按钮时,我想将写在第一帧文本框中的文本带到第二帧的 jLabel 中。当我对此进行搜索时,我得到了一些不可靠的答案。但据我所知,可以通过创建另一个静态类或调用此引用来完成。
问问题
23350 次
2 回答
8
这是一个你想要实现的“什么”的问题,这将推动“如何”......
例如...
您可以在第一帧中维护对第二帧的引用,当单击按钮时,告诉第二帧发生了变化......
public class FirstFrame extends JFrame {
// Reference to the second frame...
// You will need to ensure that this is assigned correctly...
private SecondFrame secondFrame;
// The text field...
private JTextField textField;
/*...*/
// The action handler for the button...
public class ButtonActionHandler implements ActionListener {
public void actionPerformed(ActionEvent evt) {
secondFrame.setLabelText(textField.getText());
}
}
}
这样做的问题是它暴露SecondFrame
给第一个,允许它对它做讨厌的事情,例如删除所有组件。
更好的解决方案是提供一系列接口,允许两个类相互通信......
public interface TextWrangler {
public void addActionListener(ActionListener listener);
public void removeActionListener(ActionListener listener);
public String getText();
}
public class FirstFrame extends JFrame implements TextWrangler {
private JButton textButton;
private JTextField textField;
/*...*/
public void addActionListener(ActionListener listener) {
textButton.addActionListener(listener);
}
public void removeActionListener(ActionListener listener) {
textButton.removeActionListener(listener);
}
public String getText() {
return textField.getText();
}
}
public class SecondFrame extends JFrame {
private JLabel textLabel;
private JTextField textField;
private TextWrangler textWrangler;
public SecondFrame(TextWrangler wrangler) {
textWrangler = wrangler;
wrangler.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textLabel.setText(textWrangler.getText());
}
});
/*...*/
}
}
这基本上限制了SecondFrame
可以实际访问的内容。虽然可以说ActionListener
可以SecondFrame
使用ActionEvent
源来查找更多信息,但从本质上讲,这将是一个不可靠的机制,因为interface
没有提到它应该如何实施......
于 2013-09-03T00:09:37.777 回答
0
在两个 JFrame 之间传递数据的最简单方法是创建一个公共方法。这样,您可以在要获取数据的类中创建公共方法,并使用第二类的对象直接调用此方法。而且,如果您想在不创建额外对象的情况下调用它,而不仅仅是让您的方法静态并直接使用类名进行调用。有关更多详细信息,请访问此链接
于 2021-08-21T17:21:49.827 回答