Java JLabel不';在你把我的身材最大化之前我不会出现

Java JLabel不';在你把我的身材最大化之前我不会出现,java,swing,jlabel,maximize,Java,Swing,Jlabel,Maximize,我一直在寻找这种情况,但显然没有其他问题,所以,我来了 我正在做一个学校项目,需要我制作一个JFrame,尽管我在ActionEvents上度过了一段糟糕的时光,但我最终还是可以让它工作了,所以在我的JFrame中得到一些信息后,我需要它在一个JLabel中显示一个答案,它确实如此,唯一的事情是,在我点击我的按钮后,什么都没有发生,但当我最大化或调整窗口本身的大小时,就会发生这种情况 button1= new JButton("Add user"); button1.addAct

我一直在寻找这种情况,但显然没有其他问题,所以,我来了

我正在做一个学校项目,需要我制作一个JFrame,尽管我在ActionEvents上度过了一段糟糕的时光,但我最终还是可以让它工作了,所以在我的JFrame中得到一些信息后,我需要它在一个JLabel中显示一个答案,它确实如此,唯一的事情是,在我点击我的按钮后,什么都没有发生,但当我最大化或调整窗口本身的大小时,就会发生这种情况

    button1= new JButton("Add user");
    button1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
           user= input1.getText();
        if(user.isEmpty()){
        JOptionPane.showMessageDialog(null, "you have an error there!");
        }
        else {
        output2 = new JLabel("thx for registering, "+user);
        output2.setBounds(10,40,150,20);
        panel.add(output2);
        }
    }
    });
    button1.setBounds(310,10,140,20);
    panel.add(button1);
不要使用setBounds()。Swing设计用于布局管理器,因此让布局管理器确定组件的大小/位置。阅读上的Swing教程,以获得入门的工作示例

将组件添加到可见GUI时,基本代码应为:

panel.add(...);
panel.revalidate();
panel.repaint();
revalidate()将调用布局管理器为组件提供大小/位置。重新绘制()确保所有组件都已绘制。

不要使用setBounds()。Swing设计用于布局管理器,因此让布局管理器确定组件的大小/位置。阅读上的Swing教程,以获得入门的工作示例

将组件添加到可见GUI时,基本代码应为:

panel.add(...);
panel.revalidate();
panel.repaint();

revalidate()将调用布局管理器为组件提供大小/位置。重新绘制()确保所有组件都已绘制。

好吧,我尝试在没有.setBounds()的情况下工作,并添加了您提供给我的内容,.revalidate()不起作用,所以我尝试了validate()+repaint(),但不起作用,所以我重置了所有setBounds()加上validate()和repaint(),它工作正常,非常感谢。当你不听建议时,为什么还要问问题?如果你使用布局管理器,它会工作!!!此外,该方法是revalidate()而不是validate()。revalidate()用于Swing,validate()用于AWT。是的,它可能在大多数情况下都能工作,但是再次学习如何使用Swing。用你目前的技术,它可能对一个简单的程序有效,但一旦程序变得更复杂,你需要了解Swing是如何工作的,这样你就不会有设计问题。我给了你答案,13分钟后你说它不起作用。这还不足以阅读教程、下载工作代码、了解代码的工作原理,然后重新构造现有代码。所以我的观点是,你走了一条捷径,没有花时间去学习如何有效地使用Swing,这将在将来给你带来问题。你可以现在就花时间学习Swing,或者以后再学习它,这将需要更多的时间。好吧,我尝试在没有.setBounds()的情况下工作,并添加了你给我的东西,.revalidate()不起作用,所以我尝试了validate()+repaint(),但它不起作用,所以我重置了所有setBounds()加上validate()和repaint(),它正常工作,非常感谢。当你不听建议时,为什么还要问问题?如果你使用布局管理器,它会工作!!!此外,该方法是revalidate()而不是validate()。revalidate()用于Swing,validate()用于AWT。是的,它可能在大多数情况下都能工作,但是再次学习如何使用Swing。用你目前的技术,它可能对一个简单的程序有效,但一旦程序变得更复杂,你需要了解Swing是如何工作的,这样你就不会有设计问题。我给了你答案,13分钟后你说它不起作用。这还不足以阅读教程、下载工作代码、了解代码的工作原理,然后重新构造现有代码。所以我的观点是,你走了一条捷径,没有花时间去学习如何有效地使用Swing,这将在将来给你带来问题。你可以现在就花时间学习挥杆,或者以后再忘记它,这需要更多的时间。