gpt4 book ai didi

java - 有没有更好的方法来连接两个 JPanel?

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:48 25 4
gpt4 key购买 nike

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/

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