java - 如何组织java swing应用程序架构?

标签 java swing netbeans

我正在用 Java 制作一个小项目。根据设计,该应用程序将类似于 QTranslate - 它是各种翻译器 API 的 GUI。该应用程序将有 1 个主窗体、翻译器本身和几个辅助窗体(设置、语言选择、​​保存的单词等)。 暂时不清楚辅助窗体与主窗体的交互如何实现?每个辅助形态都会影响主形态。例如,当选择语言时,主窗体中将添加一个新按钮。或者当改变设置时,热键会改变。每个表单都是一个单独的类。我是否正确理解实现此目的的唯一方法是将主表单类设为静态并从辅助表单的其他非静态类访问它?

我的应用程序的屏幕截图

enter image description here

最佳答案

我认为,将主窗体类设为静态并不是合适的 OOP 方式。相反,我会将主容器传递给辅助表单类的构造函数,这更像是 OOP 方式。

示例代码(父框架):

  public class ParentFrame extends JFrame {
    public ParentFrame() {
    this.setSize(400, 100);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new FlowLayout(FlowLayout.CENTER));

    JButton button = new JButton("Open Window");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        new ChildFrame(getContentPane()).setVisible(true);
      }
    });
    this.getContentPane().add(button);
  }
  public static void main(String[] args) {
    new ParentFrame().setVisible(true);
  }
}

示例代码(子框架):

public class ChildFrame extends JFrame {
  private Container parentContainer;
  public ChildFrame(Container parentContainer) {
    this.parentContainer = parentContainer;
    this.setSize(400, 100);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new FlowLayout(FlowLayout.CENTER));
    JButton button = new JButton("Change Frame Color");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame frame = (JFrame) SwingUtilities.getRoot(parentContainer);
        frame.getContentPane().setBackground(Color.RED);
      }
    });
    this.getContentPane().add(button);
  }
}

这只是创建一个带有按钮的父框架,该按钮打开一个带有按钮的子框架。如果单击子框架中的按钮,它会更改父框架的背景颜色。

关于java - 如何组织java swing应用程序架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731803/

相关文章:

java - TestNG @AfterMethod 绑定(bind)到当前类的方法

java - 从不同于 GUI 的类更新 TextField

java - 如何在填充表时在jtable中设置图标?

git - refs/heads/master :refs/heads/master mean? 是什么意思

java - 如何解决 NetBeans 7.3.1 中令人讨厌的紫色线条?

java - Java中使用SQL删除记录

java - 在Java中用一个感叹词正则表达式多个重复字符

java - 读取包含名称和数字混合的文件并将它们放入不同的数组中

java - 向 JFrame 添加背景

java - GlassFish 服务器 : Administrator port is occupied by null