首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing GUI工厂方法模式

Swing GUI工厂方法模式
EN

Stack Overflow用户
提问于 2012-05-30 22:36:22
回答 1查看 2.7K关注 0票数 0

我希望使用Factory Method模式,以使我的Swing UI开发更快、更易于管理。

一般来说,它是一个使用JInternalFrames的MDI应用程序。我在系统中有很多设置,如我所说的类型。userTypes、accountTypes等)我有一个固定的UI,我决定使用它。问题是,系统中有超过50个这样的类型,所以工厂方法模式似乎是最容易管理的解决方案。下面是一个工作应用程序的两个屏幕截图。

我正在看这个例子,但由于我无法估计在记录中存储所有信息所需的选项卡数量,我需要能够添加多个选项卡和控件(标签、文本框、表格、组合框等)。在这些选项卡中。

根据该示例,是否可以在抽象类中创建JTabbedPane,并在子类中对其进行修改和添加?

代码语言:javascript
复制
public AbstractTypeInternalFrame(String title) {
        setBounds(100, 100, 808, 589);

        JToolBar toolBar = new JToolBar();
        getContentPane().add(toolBar, BorderLayout.NORTH);

        JButton btnAdd = new JButton("Add");
        toolBar.add(btnAdd);

        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            }
        });
        toolBar.add(btnSave);

        JButton btnDelete = new JButton("Delete");
        toolBar.add(btnDelete);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        toolBar.add(btnCancel);

        JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane());
        getContentPane().add(recordTabs, BorderLayout.NORTH);

        JSeparator recordSearchSeparator = new JSeparator();
        getContentPane().add(recordSearchSeparator, BorderLayout.NORTH);



    }

    protected abstract int makeRecordTabPane();

正如您所看到的,我有点迷路了,只是需要一些方向来指导如何继续使用这样的模式。如果任何人有任何建议,甚至是例子/链接,将不胜感激。

我知道我的问题很模糊,所以如果我需要澄清,请随时提出。

诚挚的问候。

EN

回答 1

Stack Overflow用户

发布于 2012-05-31 17:40:39

下面是更详细的问题。

因此,我希望构建一个简单的JInternalFrame来对系统上的记录执行CRUD操作。例如用户、用户类型、帐户、帐户类型等记录。系统中有超过50个这样的类型,所以我认为使用工厂方法模式将使所有这些JInternalFrames更易于管理。

以下是用户记录的示例:

Link1 Link2

上半部分由记录的详细信息组成,这些详细信息根据记录的内容分为多个选项卡。某些记录可能只有一个选项卡,而其他较大的记录可能有多个选项卡。因此,应该在子类级别按this example.实例化JTabbedPane的内容

底部是我们搜索该类型的记录的地方。例如,在发布的链接中,打开了用户管理器JInternalFrame。然后,我们将根据用户名和/或userID搜索用户。结果显示在下表中,双击搜索结果时,记录将显示在JTabbedPane的上方。

然后使用Add、Save、Delete和Cancel按钮对输入到记录中的任何内容执行CRUD操作。

由此,我们可以说,需要通过子类实例化的设计方面是:

1) JInternaFrame的大小2) JTabbedPane的所有内容:标签、表格、标签、文本框等的编号3)搜索结果JTable中的列数:我们可以通过实例化JTable头部来更改列数。

一开始,我只是尝试创建一个带有JTabbedPane的抽象类,并向JTabbedPane添加组件,看看如何才能实现它。这是我之前发布的代码。此文件是使用WindowBuilder生成的,我随后对其进行了修改:

代码语言:javascript
复制
package zm.co.freight.fpsManagementGUI.view;

import java.awt.EventQueue;

public abstract class AbstractTypeInternalFrame extends JInternalFrame {

    /**
     * Launch the application.
     */
//  public static void main(String[] args) {
//      EventQueue.invokeLater(new Runnable() {
//          public void run() {
//              try {
//                  AbstractTypeInternalFrame frame = new AbstractTypeInternalFrame();
//                  frame.setVisible(true);
//              } catch (Exception e) {
//                  e.printStackTrace();
//              }
//          }
//      });
//  }

    /**
     * Create the frame.
     */
    public AbstractTypeInternalFrame(String title) {
        setBounds(100, 100, 808, 589);

        JToolBar toolBar = new JToolBar();
        getContentPane().add(toolBar, BorderLayout.NORTH);

        JButton btnAdd = new JButton("Add");
        toolBar.add(btnAdd);

        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            }
        });
        toolBar.add(btnSave);

        JButton btnDelete = new JButton("Delete");
        toolBar.add(btnDelete);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        toolBar.add(btnCancel);

        JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane());
        getContentPane().add(recordTabs, BorderLayout.NORTH);

        JSeparator recordSearchSeparator = new JSeparator();
        getContentPane().add(recordSearchSeparator, BorderLayout.NORTH);



    }

    protected abstract int makeRecordTabPane();

}

问题是,我是在正确的轨道上吗?我应该如何使用工厂方法模式来处理它,因为我似乎没有很好地掌握它。我见过一些更简单的例子,比如形状和绘图,但是我对Swing接口有点迷惑。你有没有一个好的例子可以给我指引,或者一个简单的例子来给我指明正确的方向……这就是我所要求的全部。抱歉,如果我说得太含糊了..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10818480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档