0

我希望使用工厂方法模式来使 Swing UI 的开发更快、更易于管理。

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

记录的主要部分 在此处输入图像描述

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

根据示例,是否可以在抽象类中创建 JTabbedPane 并在子类中对其进行修改和添加?我尝试了以下方法,有点迷失:

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();

使用 makeRecordTabPane() 方法需要返回一个 int。

如您所见,我有点迷茫,只需要一些指导来了解如何继续使用这种模式。如果有任何建议甚至示例/链接,将不胜感激。

我意识到我的问题很模糊,所以如果我需要任何澄清,请随时提问。

此致。

4

1 回答 1

0

这是更详细的问题。

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

以下是用户记录的示例:

链接 1 链接2

上半部分构成记录的详细信息,根据记录的内容分为选项卡。有些记录可能只有一个选项卡,而其他较大的记录可能有多个。因此,JTabbedPane 的内容应该在子类级别和本示例中进行实例化。

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

然后使用添加、保存、删除和取消按钮对输入到记录中的任何内容执行 CRUD 操作。

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

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

作为开始,我试图只创建一个带有 JTabbedPane 的 Abstract 类,然后将组件添加到 JTabbedPane 以了解如何去做。这是我之前发布的代码。该文件是使用 WindowBuilder 生成的,后来我对其进行了修改:

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 接口有点迷失。有没有一个很好的例子可以指导我,或者一个简单的例子只是为了给我指出正确的方向......这就是我所要求的。对不起,如果它是模糊的......

于 2012-05-31T09:40:38.987 回答