繁体   English   中英

我调用实例化方法后,JButton没有出现在面板上

[英]JButton does not appear on panel after i invoke the instantiation method

在netbeans中对此进行了编码,因此我自己没有编写用于创建其余GUI的所有代码。

btn_Next是面板上已经存在的按钮

private void place_Button() {

    btn_Next.setLocation((btn_Next.getX()+30), btn_Next.getY());
    btn_Next.revalidate();
    btn_Next.repaint();

    JButton btn_Back = new JButton("Back");
    pnl_Buttons.add(btn_Back);

    btn_Back.setPreferredSize(btn_Next.getPreferredSize());
    btn_Back.setLocation((btn_Next.getX()- 100), btn_Next.getY());
    btn_Back.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            switch_Works_Back();
        }
    });

    btn_Back.setVisible(true);
    pnl_Buttons.revalidate();
    pnl_Buttons.repaint();

}

pnl_Buttons使用什么布局管理器? 如果您不知道,则可以轻松地将Java打印出来:

System.out.println(pnl_Buttons.getLayout());

请注意,某些布局管理器允许添加组件的效率比其他组件好得多,对于您的问题,布局是关键。


这是一个猜测,但看起来您的pnl_Buttons使用的是null布局,如果这样,您的JButton可能不会显示,因为它的大小是0 x 0,因为您从未设置过它的大小; 这是因为空布局要求添加的组件完全指定其自己的大小和位置。 您指定按钮的位置和首选大小,但不指定按钮的大小。 如果是这样,一个快速的解决方案是通过设置JButton的大小setSize(...)更好的是不要使用空布局,而是使用更人性化的布局管理器之一。

顺便说一句,您不应该在要添加的组件上调用revalidate()repaint() ,也不需要在JBUtton上调用setVisible(true) ,除非您之前已对其调用setVisible(false) 相反,您只需要在要将组件添加到的容器repaint()这里是pnl_Buttons对象repaint()上调用revalidate()repaint()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM