Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在NetBeans中刷新自定义bean?_Java_Swing_Netbeans_Matisse - Fatal编程技术网

Java 如何在NetBeans中刷新自定义bean?

Java 如何在NetBeans中刷新自定义bean?,java,swing,netbeans,matisse,Java,Swing,Netbeans,Matisse,我想在NetBeans IDE中设计一个相对复杂的UI。我相信,将所有这些组件集中在一个面板中会加大此类面板维护的难度 为此,我在扩展JPanel的多个自定义bean中分解了这个结构。在主面板中,我通过调色板工具栏中的ChooseBean按钮将它们包括在内 一切看起来都很正常,但当我更改其中一个子bean时,主面板中导入的自定义bean上不会发生更改 请告诉我如何重新加载那个bean?谢谢 为此,我已在多个自定义项目中分解了此结构 扩展JPanel的bean。在主面板中,我已经通过 选择调色板工

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

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

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

请告诉我如何重新加载那个bean?谢谢

为此,我已在多个自定义项目中分解了此结构 扩展JPanel的bean。在主面板中,我已经通过 选择调色板工具栏中的Bean按钮

作为一个初学者,我想说这是一个非常有效的方法,对于未来的访问者,您将按照所描述的步骤将面板添加到主面板。通过将bean直接从Projects浏览器拖放到Design视图,也可以做到这一点

每件事看起来都很好,但当我改变其中一个子bean时 主面板中导入的自定义bean没有发生更改

简而言之,答案如下:

  • 在设计视图中打开主面板
  • 转到“导航器”选项卡
  • 右键单击表单主面板并选择“重新加载表单”选项
  • 主面板已更新
  • 但是,它不起作用,而且似乎在这件事上有一个长期存在的问题,他们说这不是一个bug,而是一个布局管理器相关的东西(尽管解释不太清楚):

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

    因此,GroupLayout导致这种行为的原因并不十分清楚,但根据经验,要解决它,您必须:

  • 为自定义面板设置不同的布局管理器(即:FlowLayout或GridBagLayout)
  • 将这些面板添加到主面板。如果已经有这些面板,请删除它们,然后再次添加它们。自定义配电盘必须至少有一个零部件
  • 完成前面的步骤后,可以将“自定义面板布局管理器”设置回GroupLayout(自由设计),它仍然可以工作
  • 修改自定义面板时,必须对其进行编译(F9),并且需要通过Navigator explorer更新主面板窗体
  • 在进一步讨论之前,我建议您不要将布局管理器设置为GroupLayout(步骤3),而是使用GridBagLayout。这也不是我最喜欢的,但我觉得它比GroupLayout更好。您可能想看看示例中反对GroupLayout的原因(我相信在SO中会有更多)

    现在,请考虑下面的例子(对于扩展表示抱歉)。 1.创建自定义面板 转到新文件→ SwingGUI窗体→ 杰帕内尔。命名它

    CustomPanel

    2.将布局管理器设置为FlowLayout 注意:如果它说默认值,并不意味着它是使用的默认值,而是默认的por
    JPanel
    class。正如我所说,默认情况下使用的布局管理器是GroupLayout

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

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

    公共类CustomPanel扩展了javax.swing.JPanel{
    公众谘询委员会({
    初始化组件();
    }
    @抑制警告(“未选中”)
    //                           
    私有组件(){
    jButton1=newjavax.swing.JButton();
    setText(“jButton1”);
    添加(jButton1);
    }// 
    //变量声明-不修改
    私有javax.swing.JButton jButton1;
    //变量结束声明
    }
    
    4.创建主面板 按照步骤1创建一个新的
    JPanel
    ,并将其命名为
    MainPanel

    5.将
    CustomPanel
    添加到
    MainPanel
    可以使用调色板和自定义Bean,也可以从项目浏览器中拖放并保存更改

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

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

    7.重新加载主面板的窗体 转到
    MainPanel
    design视图:它仍然保持不变。转到“导航器”选项卡并重新加载主面板的窗体:

    太棒了,主面板现在更新了


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

    如何重新加载该bean?==,为了获得更好的帮助,请尽快发布SSCCE/MCVE。简短的、可运行的、可编译的,带有本地语言中JavaBeans的硬编码值variable@mKorbel我读了你的链接,但找不到我的答案!顺便说一下,当我从主面板移除bean并再次添加它时,它将被刷新。我认为这个问题与NetBeans IDE有关,而不是我的codes@mKorbel我认为OP意味着他正在使用Mattise(NetBeans的GUI构建器)添加一个定制bean,如前所述。不要认为OP的bean本身有问题,但是当他编辑这个自定义bean时,目标面板没有更新(同样,在Matisse设计视图中)。我真诚地感谢你非常有用的回答!非常感谢你,我真的很感谢你带蒂姆去
    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 
    }