gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:05:39 26 4
gpt4 key购买 nike

我正在用 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/

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