我想在NetBeans IDE中设计一个相对复杂的UI。我认为,将所有这些组件集中在一个专家组中可能会加剧这类专家组的维护难度。
为此,我在扩展JPanel
的多个自定义bean中细分了这个结构。在主面板中,我通过调色板工具栏中的选择Bean 按钮将它们包含在内。
每件事看起来都不错,但是当我更改其中一个子bean时,主面板中导入的自定义bean上不会发生更改。
请指出我如何重新加载该bean?感谢
答案 0 :(得分:3)
为此,我已经在多个自定义中分解了这个结构 扩展JPanel的bean。在主要的小组中,我把它们包括在内 选择调色板工具栏中的Bean按钮。
作为首发,我想说它是一个完全有效的应用程序,对于未来的访问者,您按照here描述的步骤将面板添加到主面板。同样可以通过拖放来实现。将bean直接从Projects explorer拖放到Design视图。
每件事看起来都不错但是当我改变其中一个子豆时, 主面板中导入的自定义bean不会发生更改。
简短回答如下:
然而它不起作用,似乎有一个bug report在这个问题上有一个长期存在的问题,他们告诉它不是一个bug而是一个布局经理相关的东西(虽然不是很清楚的解释):< / p>
“问题是MyFrame中的jPanel1生成了布局代码 (GroupLayout) - 设置布局导致组件被删除。该 遗憾的是,GUI构建器不知道有不同的容器 具有自己的布局,因为它仅通过自定义代码指定而不是 在GUI表单中实际实例化。但是,您可以轻松解决此问题 - 只需将MyFrame中jPanel1的布局设置为Flowlayout。这是JPanel的默认布局,因此GUI构建器不会生成任何内容 布局代码和您的自定义面板将保持不变。“
所以,不清楚为什么GroupLayout导致这种行为,但凭经验解决它你必须:
在继续之前,我建议您不要将布局管理器设置为GroupLayout(步骤3),而是使用GridBagLayout。这不是我最喜欢的,但恕我直言,这是比GroupLayout更好的选择。您可能想看看针对GroupLayout示例here和here的原因(我确信在SO中有更多关于它的内容)。
现在,请考虑以下示例(对不起扩展名)。
转到新文件→ Swing GUI表格→ JPanel 。将其命名为CustomPanel
注意:默认情况下,它并不意味着它是默认的使用,而是默认的por JPanel
类。正如我所说,默认情况下使用的布局管理器是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
使用palette和Custom Bean,或者从Projects explorer拖放并保存更改。
注意:如果需要,您可以调整此面板的大小。如果您转到导航器选项卡,您将在主面板中看到自定义面板:
将布局设置回GroupLayout(自由设计)并根据需要进行修改。保存更改并编译文件。
转到MainPanel
设计视图:它仍然保持不变。转到导航器选项卡并重新加载主面板的表单:
太棒了,主面板现已更新!
从现在开始,每次我们修改自定义面板时,我们都要编译它们并重新加载主面板的形式(仅步骤6和7:)