NetBeans Project and Source Code of a minimal example
是否有更好的方法可以将JFrame
与JPanel
从另一个类别连接起来,而不是将JPanel
的字段设为公开?
我正在编写一个程序,其中会有一个选项按钮,当按下该按钮时,自定义JOptionPane.showOptionDialog
会在其中显示一个JPanel
,其中包含特定选项用户想要的。
当用户按下JOptionPane.OK_OPTION
按钮时,程序会关闭OptionDialog
内的JPanel
并返回JFrame
。然后我需要在JPanel中输入的任何内容在JFrame
类中使用。我只是通过制作JPanel
公共文本字段来做到这一点,但我觉得这是一种廉价的做法,特别是因为NetBeans
不会让我这样做,除非我在记事本中打开来源
如果JOptionPane.OK_OPTION
只是将Jpanel
的字段保存在文件中,然后我可以在JFrame
类中单独检索它们,我也完全可以了
那么有更好的方法吗?
JFrame
动作监听器:
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);
}
}
答案 0 :(得分:1)
您的问题是一般问题的具体示例:两个对象如何通信?
如,
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);
}
}
修改强>
您在评论中说明:
我本来会使用getter和setter,但是从我读过的书籍以及我经常阅读的论坛中我知道,普遍的共识是,得到吸气剂和制定者甚至比公共领域更糟糕。
对不起,但那是一场嘘声。请考虑您的代码与我的代码。在我上面的代码中,我建议使用一种方法,例如:
// 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对象的状态?