1

我想在 NetBeans IDE 中设计一个相对复杂的 UI。我相信将所有这些组件放在一个面板中会增加该面板的维护难度。

为此,我在多个扩展的自定义 bean 中分解了这个结构JPanel。在主面板中,我通过调色板工具栏中的选择 Bean按钮将它们包括在内。

一切看起来都不错,但是当我更改其中一个子 bean 时,更改不会发生在主面板中导入的自定义 bean 上。

请指出我如何重新加载该bean?谢谢

4

1 回答 1

3

为此,我在扩展 JPanel 的多个自定义 bean 中分解了这个结构。在主面板中,我通过调色板工具栏中的选择 Bean 按钮将它们包括在内。

作为一个初学者,我想说这是一个非常有效的方法,对于未来的访问者,您正在按照此处描述的步骤将您的面板添加到主面板。可以通过将 bean 直接从 Projects explorer 拖放到 Design 视图来完成相同的操作。

一切看起来都不错,但是当我更改其中一个子 bean 时,更改不会发生在主面板中导入的自定义 bean 上。

简短的回答如下:

  1. 在设计视图中打开主面板。
  2. 转到导航器选项卡。
  3. 右键单击 Form MainPanel 并选择 Reload Form 选项。
  4. 主面板已更新。

但是它不起作用,似乎关于这个问题的错误报告存在一个长期存在的问题,他们告诉这不是错误,而是与布局管理器相关的东西(虽然不是很清楚的解释):

“问题是 MyFrame 中的 jPanel1 生成了一个布局代码 (GroupLayout) - 设置布局会导致组件被删除。遗憾的是,GUI 构建器不知道有一个具有自己布局的不同容器,因为它仅通过自定义代码和没有真正在 GUI 表单中实例化。但是您可以轻松解决此问题 - 只需将 MyFrame 中 jPanel1 的布局设置为 Flowlayout。这是 JPanel 的默认布局,因此 GUI 构建器不会生成任何布局代码,您的自定义面板将完好无损。”

因此,尚不清楚为什么 GroupLayout 会导致这种行为,但凭经验解决它,您必须:

  1. 为自定义面板设置不同的布局管理器(即:FlowLayout 或 GridBagLayout)。
  2. 将这些面板添加到主面板。如果它已经有这些面板,请删除它们并再次添加它们。自定义面板必须至少包含一个组件,这一点很重要。
  3. 完成前面的步骤后,可以将自定义面板布局管理器设置回 GroupLayout(自由设计),它仍然可以工作。
  4. 修改自定义面板时,必须对其进行编译(F9),并且需要通过 Navigator explorer 更新主面板表单。

在继续之前,我建议您不要将布局管理器设置回 GroupLayout(第 3 步),而是使用 GridBagLayout。这也不是我最喜欢的,但恕我直言,它是比 GroupLayout 更好的选择。您可能想看看这里这里举例说明的反对 GroupLayout 的原因(我敢肯定这里有更多关于它的信息)。

现在,请考虑以下示例(抱歉扩展名)。

1.创建自定义面板

转到New FileSwing GUI FormsJPanel。给它命名CustomPanel

2.设置布局管理器为FlowLayout

注意:它说 Default 并不意味着它是使用的默认值,而是默认的 porJPanel类。正如我所说,默认使用的布局管理器是 GroupLayout。

将布局管理器设置为 FlowLayout

3.在面板中添加一些组件,然后编译文件

将 JButton 添加到面板

请注意,生成的代码应如下所示(根本没有 GroupLayout):

public class CustomPanel extends javax.swing.JPanel {

    public CustomPanel() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        jButton1.setText("jButton1");
        add(jButton1);
    }// </editor-fold>

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration 
}

4.创建主面板

按照步骤 1 创建一个新的JPanel并命名它MainPanel

5. 添加CustomPanelMainPanel

通过使用调色板和自定义 Bean 或从项目资源管理器拖放并保存更改。

将 CustomPanel 添加到 MainPanel

注意:您可以根据需要调整此面板的大小。如果您转到导航器选项卡,您将在主面板内看到自定义面板:

将 CustomPanel 添加到 MainPanel

6.修改自定义面板

将布局设置回 GroupLayout(自由设计)并根据需要进行修改。保存更改并编译文件。

自定义面板已修改

7.重新加载主面板的表格

转到MainPanel设计视图:它仍然没有改变。转到导航器选项卡并重新加载主面板的表单:

重新加载主面板表单

太棒了,主面板现已更新!

主面板已更新

从现在开始,每次我们修改自定义面板时,我们都必须编译它们并重新加载主面板的表单(仅步骤 6 和 7 :)

于 2014-11-19T23:06:25.610 回答