将所有 java swing gui 放在一个类中是否正常?

2023-12-21

我刚刚开始进行摇摆开发并且遇到了问题。将整个 GUI 放入一个类中正常吗?我正在构建的应用程序有一个显示多个不同“页面”的 JFrame。例如,如果用户单击按钮,他们将被带到具有不同布局的完全不同的页面。我已经配置了卡片布局,并且到目前为止我构建的一张卡片使用了 GridBag 布局。

那么我的问题是
1. 每个页面是否应该有自己的类?
2. 如果可以,我如何在运行卡片布局的 GUI 控制器和各个页面之间进行通信?
3. 或者我应该将所有 GUI 放入 GUI 控制器中并让它像那样运行。

下面是我到目前为止所拥有的代码,我对此很陌生,并且真的很想擅长它,所以如果您发现我错过的任何重大问题,请随时指出。

单个页面的代码:

public class HomePage extends JPanel implements ActionListener{
    private GridBagLayout gl;
    private JPanel frm;
    JButton newPersonalContact;
    HomePage(){
         frm=new JPanel();
         gl=new GridBagLayout();
         GridBagConstraints gbc=new GridBagConstraints();
         frm.setLayout(gl);

         newPersonalContact=new JButton("New Personal Contact");
         JButton newBusinessContact=new JButton("New Business Contact");
         JButton showAllContacts=new JButton("Show All Contacts");
         JButton saveAndQuit=new JButton("Save and Quit");

         JPanel top=new JPanel();
         top.setBackground(new Color(218,165,32));
         top.add(new JLabel("Western Governers University Presents:"));


         JPanel middle=new JPanel();
         middle.setBackground(new Color(43,37,85));
         GridLayout ge=new GridLayout(4,4);
         middle.setLayout(ge);

         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(newPersonalContact);


         middle.add(newBusinessContact);
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(showAllContacts);

         middle.add(saveAndQuit);
         middle.add(new JLabel(""));middle.add(new JLabel(""));
         middle.add(new  JLabel(""));
         middle.add(new JLabel(""));

         JPanel bottom=new JPanel();
         bottom.setBackground(new Color(218,165,32));

         gbc.fill=GridBagConstraints.BOTH;
         gbc.weightx=1.0;

         gbc.weighty=2.0;
         gbc.gridx=0;
         gbc.gridy=0;
         frm.add(top,gbc);

         gbc.weighty=6.0;
         gbc.gridx=0;
         gbc.gridy=1;
         frm.add(middle,gbc);

         gbc.weighty=1.0;
         gbc.gridx=0;
         gbc.gridy=2;
         frm.add(bottom,gbc);

         newPersonalContact.addActionListener(this);
         newBusinessContact.addActionListener(this);
         showAllContacts.addActionListener(this);
         saveAndQuit.addActionListener(this);


}
    public void actionPerformed(ActionEvent ae){
    if (ae.getSource()==newPersonalContact){
        //What goes here?
    }

}
public JPanel getFrame(){
    return frm;
}

}

GUI 控制器的代码:

public class GUIController {
    JFrame frm;
    CardLayout cl;
    Container pane;
GUIController(){
frm=new JFrame();
frm.setSize(800,600);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel card2=new JPanel();
card2.setBackground(Color.black);

JPanel cards=new JPanel(new CardLayout());
cards.add(new HomePage().getFrame(), "Home");
cards.add(card2,"New Personal Contact");
pane=frm.getContentPane();
pane.add(cards,BorderLayout.CENTER);





}
public void start(){
    this.frm.setVisible(true);

}
public void showCard(){
    cl.show(pane, "Card2");
}


}

虽然这是一个学校项目,但 GUI 界面并不是必需的,只是我有兴趣学习的东西。谢谢你的帮助。


不,我不建议将所有 GUI 代码放在类中 - 至少在它变得很大并且可以做几件事的情况下。

在这种情况下,请使用中介者模式:

  • 将子组件放入 JPanel 的自定义子类中
  • 该子类监听其子类的事件并更新其他子类
  • 如果需要,触发自己的自定义事件

另请注意:如果您即将学习 GUI 编程并且没有使用 Swing 的特定要求,请考虑使用较新的 GUI 工具包JavaFX http://docs.oracle.com/javafx/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将所有 java swing gui 放在一个类中是否正常? 的相关文章

随机推荐

  • 如何使用计时器运行 php 脚本?

    我有 foreach 函数来打印学生姓名 names array Alex Brad Tom foreach names as name echo name br sleep 3 我如何打印每个名字 每 3 秒一次 后 echo name
  • 如何使用 bash 脚本安装包含变量的 bash 函数? [复制]

    这个问题在这里已经有答案了 我正在尝试创建一个 bash 脚本 该脚本允许我在多台计算机上安装相同的 bash 函数 此特定函数在备份目录中创建带有时间戳的文件副本 filebackup cp filebackup date Y m d H
  • ASP.NET MVC3 WebGrid 帮助程序和模型元数据

    我正在尝试使用 ASP NET MVC 3 中的 WebGrid html 帮助程序根据 ModelMetadata 中找到的信息自动生成列 例如 接受对象列表的视图中的代码将是 var grid new WebGrid Model gri
  • 两个列表的交集,在第一个列表中保留重复项

    我有两个平面列表 其中之一包含重复值 例如 array1 1 4 4 7 10 10 10 15 16 17 18 20 array2 4 6 7 8 9 10 我需要在 array1 中查找也在 array2 中的值 将重复项保留在 ar
  • 在 ActionScript 3 中将一系列函数“链接”在一起

    我正在调用一个函数 并在该函数返回一些数据时添加一个侦听器 当数据返回时我需要调用另一个函数等等 是否有一种简单的方法将这些函数 链接 在一起 以便第一个函数触发 等待侦听器 然后触发第二个函数 为其创建侦听器 依此类推 直到最后一个函数调
  • SSRS 传递报告参数

    我度过了艰难的一天 试图解决这个问题的根本问题 我有一个用户输入信息的表单 该信息通过 URL 传递到 SSRS 我收到错误 An error has occurred during report processing rsProcessi
  • UITextField 中的 UITextPosition

    有什么方法可以让我通过文本字段的 UITextRange 对象获取 UITextField 当前的插入符位置吗 UITextField 返回的 UITextRange 有什么用吗 UITextPosition 的公共接口没有任何可见成员 昨
  • 基于 Restful 的视频流

    使用 spring boot 我想制作基于 RESTful 的视频播放器 我的文件浏览器中有 mp4 扩展名的视频 如何通过创建休息端点在前端提供这些视频 我已经尝试过这个方法 http shazsterblog blogspot com
  • 如何在 Three.js 中更改脸部颜色

    我正在尝试更改网格单个面上的颜色 这是在 WebGL 上下文中 我可以改变整个网格的颜色 但不能改变单个面的颜色 相关代码如下 Updated Per Lee var camera this camera var projector new
  • 如何编写语法类似Python缩进的语言?

    我正在使用类似于 Python 的内置语言编写一个工具 我想让缩进在语法中有意义 以便行开头的制表符和空格代表命令的嵌套 做这个的最好方式是什么 我之前写过递归下降和有限自动机解析器 目前的CPython http en wikipedia
  • 仅对最近修改的文件运行 grunt-contrib-jshint

    我们正在一个非常大的网站上重构代码 我想对任何发生更改的文件强制执行 linting 但忽略其余文件 因为其中许多文件最终会被删除 所以整理它们是浪费时间 我想要一个 grunt 任务来检查文件的修改日期是否比其创建 从存储库获取 日期更新
  • Vue.js 在 setTimeout 后滚动到新页面路由的顶部

    当立即滚动到新路线的顶部时 我的页面转换效果不佳 我想等待 100 毫秒 然后它会自动滚动到顶部 以下代码根本不会滚动 有没有办法做到这一点 export default new Router mode history routes pat
  • elasticsearch.js 客户端连接被拒绝:Access-Control-Allow-Origin 无法识别?

    我一直在尝试使用elasticsearch jquery min js ping 本地运行的elasticsearch 每次都会收到 无活动连接 错误 ETA 在 Chrome 中 我看到看起来相当低级别的 连接被拒绝 我正在 MacOS
  • 使用切片值的 Golang 字符串格式

    在这里 我尝试从包含字符串的切片为我的 API 创建查询字符串 ie where node name node1 node name node 2 import fmt strings func main nodes string node
  • 函数内部多处理 scipy 优化的奇怪行为

    这是一个运行良好的简单代码 即使函数 minimize 包装了 scipy optimize minimize 它也不会抱怨酸洗 import numpy as np from scipy import optimize from mult
  • 重新使用对象的存储而不首先销毁它是UB吗?

    给定非 POD 类型T auto p new T new p T delete p 这是UB吧 显然我并没有直接泄漏为其分配的内存T 如果它没有间接成员 那么我根本不会泄漏任何东西 但它从未被破坏 在我看来 这似乎是自发毁灭由有感知的猫类生
  • 单行 INSERT 是原子的吗?例如。在有 1M 列的表上?

    单行 INSERT 是原子的 对于外部读取器 吗 想象一下它发生在一个有 1M 列的表上 在执行单个INSERT语句 即 单行 类型 是否有可能同时发生的读取操作 可能使用 读取未提交 隔离级别 仅读取some值 列 我对 MS SQL S
  • 如何通过策略将 Azure 资源锁应用到资源组

    我正在尝试创建一个 Azure 策略 该策略会将级别为 CanNotDelete 的资源锁部署到订阅内的资源组 目前该策略 100 合规 但该策略尚未创建任何锁定 我的 JSON policy rules 文件中有以下内容 if field
  • Spring/RabbitMQ 教程的 Docker 映像导致连接被拒绝

    我正在这里学习 Spring 教程 使用 RabbitMQ 发送消息 https spring io guides gs messaging rabbitmq 我发现了这个问题 但它没有解决我关于docker compose yml教程中找
  • 将所有 java swing gui 放在一个类中是否正常?

    我刚刚开始进行摇摆开发并且遇到了问题 将整个 GUI 放入一个类中正常吗 我正在构建的应用程序有一个显示多个不同 页面 的 JFrame 例如 如果用户单击按钮 他们将被带到具有不同布局的完全不同的页面 我已经配置了卡片布局 并且到目前为止