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



这是在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,因为你从未设置过它的大小;这是因为null布局要求添加的组件完全指定自己的大小和位置。您指定按钮的位置和首选大小,但不指定其大小。如果是这样,一个快速的解决方案是通过setSize(...)设置JButton的大小,但更好的是不要使用null布局,而是使用一个更用户友好的布局管理器。

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

最新更新