调用实例化方法后,JButton不会出现在面板上

时间:2014-08-27 20:24:13

标签: java swing layout jbutton jcomponent

在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();

}

1 个答案:

答案 0 :(得分:3)

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

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

请注意,某些布局管理器允许更好地添加组件,对于您的问题,布局是关键。


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

顺便说一句,你不应该在被添加的组件上调用revalidate()repaint(),除非你调用了{{{}},否则不需要在JBUtton上调用setVisible(true)。之前有1}}。相反,您只需要在要添加组件的容器上调用setVisible(false)revalidate(),此处为pnl_Buttons对象。