我想在 NetBeans IDE 中设计一个相对复杂的 UI。我相信将所有这些组件放在一个面板中会增加该面板的维护难度。
为此,我在多个扩展的自定义 bean 中分解了这个结构JPanel
。在主面板中,我通过调色板工具栏中的选择 Bean按钮将它们包括在内。
一切看起来都不错,但是当我更改其中一个子 bean 时,更改不会发生在主面板中导入的自定义 bean 上。
请指出我如何重新加载该bean?谢谢
为此,我在扩展 JPanel 的多个自定义 bean 中分解了这个结构。在主面板中,我通过调色板工具栏中的选择 Bean 按钮将它们包括在内。
作为一个初学者,我想说这是一个非常有效的方法,对于未来的访问者,您正在按照此处描述的步骤将您的面板添加到主面板。可以通过将 bean 直接从 Projects explorer 拖放到 Design 视图来完成相同的操作。
一切看起来都不错,但是当我更改其中一个子 bean 时,更改不会发生在主面板中导入的自定义 bean 上。
简短的回答如下:
但是它不起作用,似乎关于这个问题的错误报告存在一个长期存在的问题,他们告诉这不是错误,而是与布局管理器相关的东西(虽然不是很清楚的解释):
“问题是 MyFrame 中的 jPanel1 生成了一个布局代码 (GroupLayout) - 设置布局会导致组件被删除。遗憾的是,GUI 构建器不知道有一个具有自己布局的不同容器,因为它仅通过自定义代码和没有真正在 GUI 表单中实例化。但是您可以轻松解决此问题 - 只需将 MyFrame 中 jPanel1 的布局设置为 Flowlayout。这是 JPanel 的默认布局,因此 GUI 构建器不会生成任何布局代码,您的自定义面板将完好无损。”
因此,尚不清楚为什么 GroupLayout 会导致这种行为,但凭经验解决它,您必须:
在继续之前,我建议您不要将布局管理器设置回 GroupLayout(第 3 步),而是使用 GridBagLayout。这也不是我最喜欢的,但恕我直言,它是比 GroupLayout 更好的选择。您可能想看看这里和这里举例说明的反对 GroupLayout 的原因(我敢肯定这里有更多关于它的信息)。
现在,请考虑以下示例(抱歉扩展名)。
转到New File→ Swing GUI Forms→ JPanel。给它命名CustomPanel
注意:它说 Default 并不意味着它是使用的默认值,而是默认的 porJPanel
类。正如我所说,默认使用的布局管理器是 GroupLayout。
请注意,生成的代码应如下所示(根本没有 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
}
按照步骤 1 创建一个新的JPanel
并命名它MainPanel
。
CustomPanel
到MainPanel
通过使用调色板和自定义 Bean 或从项目资源管理器拖放并保存更改。
注意:您可以根据需要调整此面板的大小。如果您转到导航器选项卡,您将在主面板内看到自定义面板:
将布局设置回 GroupLayout(自由设计)并根据需要进行修改。保存更改并编译文件。
转到MainPanel
设计视图:它仍然没有改变。转到导航器选项卡并重新加载主面板的表单:
太棒了,主面板现已更新!
从现在开始,每次我们修改自定义面板时,我们都必须编译它们并重新加载主面板的表单(仅步骤 6 和 7 :)