NetBeans Project and Source Code of a minimal example
除了将 JPanel
的字段公开之外,是否有更好的方法将 JFrame
与另一个类的 JPanel
连接起来?
我正在编写一个程序,其中将有一个选项按钮,当按下该按钮时,将弹出一个自定义的JOptionPane.showOptionDialog
,其中包含一个JPanel
,其中将保存用户想要的特定选项。
当用户按下JOptionPane.OK_OPTION
按钮时,程序将关闭OptionDialog
及其内部的JPanel
并返回到JFrame
。然后我需要在 JPanel 中输入的任何内容都可以在 JFrame
类中使用。我只是通过将 JPanel
的文本字段公开来做到这一点,但我觉得这是一种廉价的方法,特别是因为除非我在记事本中打开源代码,否则 NetBeans
不会让我这样做。
此外,如果 JOptionPane.OK_OPTION
只是将 Jpanel
的字段保存在文件中,然后我可以在 JFrame
类中单独检索它们,我也完全可以接受。
那么有没有更好的方法来做到这一点?
JFrame
Action 监听器:
private void goSettingsActionPerformed(java.awt.event.ActionEvent evt) {
Settings settings = new Settings();
int result = JOptionPane.showOptionDialog(null,
settings,
"Settings",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
new String[]{"Save", "Cancel"},
"default");
if (result == JOptionPane.OK_OPTION) {
username = settings.jTextField1.getText();
usernameInputedLabel.setText(username);
}
}
最佳答案
您的问题是一般问题的具体示例:两个对象如何通信?
- 您考虑使用您所知道的公共(public)字段是错误的。
- 您提到将数据保存到文件中,但这不是多余的吗?当有更简单的解决方案可用时,这不会增加不必要的时间和资源开销吗?
- 最好使用与不是 Swing GUI 时使用的技术相同的技术:公共(public)方法,包括 getter 和 setter 方法(如果需要)。
例如,
private void goSettingsActionPerformed(java.awt.event.ActionEvent evt) {
Settings settings = new Settings();
int result = JOptionPane.showOptionDialog(null,
settings,
"Settings",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
new String[]{"Save", "Cancel"},
"default");
if (result == JOptionPane.OK_OPTION) {
// **** give your Settings class this method:
username = settings.getUserName();
usernameInputedLabel.setText(username);
}
}
<小时/>
编辑
您在评论中指出:
I would have used getters and setters but from the books that I've read and the forums that I frequent I know that the general consensus is that having getters and setters is even worse than public fields.
抱歉,但那是废话。请考虑您的代码与我的代码。在上面的代码中,我建议给 vng Settings 一个方法,例如:
// in declarations:
// don't name this jTextField1
private JTextField userNameField = new JTextField();
// public getter method
public String getUserName() {
return jTextField1.getText(); // this should be named userNameField
}
而您的建议是公开 JTextField,将其完全暴露给所有参与者。哪个风险更大?这可能允许调用代码在您不知情的情况下更改 Settings 对象的状态?
关于java - 有没有更好的方法来连接两个 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897145/