Java JFrame不更新按钮的设置

Java JFrame不更新按钮的设置,java,swing,netbeans,jframe,jbutton,Java,Swing,Netbeans,Jframe,Jbutton,我目前有一个小问题,Java Jframe和一个按钮没有更新 我正在尝试禁用打印按钮,直到它打开的新JFrame打印完成并且JFrame关闭 该按钮仅在出现新窗口时才会禁用,但在此之前不会禁用,这可能需要一点时间 我通过这样做将按钮设置为禁用:printbtn.setEnabled(false) 我尝试调用mainPanel.revalidate();mainPanel.repaint();printbtn.revalidate();printbtn.repaint以及他们在其他论坛中建议的上述

我目前有一个小问题,Java Jframe和一个按钮没有更新

我正在尝试禁用打印按钮,直到它打开的新JFrame打印完成并且JFrame关闭

该按钮仅在出现新窗口时才会禁用,但在此之前不会禁用,这可能需要一点时间

我通过这样做将按钮设置为禁用:
printbtn.setEnabled(false)

我尝试调用
mainPanel.revalidate();mainPanel.repaint();printbtn.revalidate();printbtn.repaint
以及他们在其他论坛中建议的上述内容的混合

我现在有点不知所措,为什么在新窗口出现之前它不禁用按钮,因为我做的第一件事就是如上所示禁用它,然后通过创建新窗口

谢谢,
Erik

最有可能的问题是,释放EDT以允许其重新绘制禁用按钮

一般情况下,它看起来像这样:

PrintBttn.setEnabled(false);
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        // Code to display the second JFrame goes here
    }
};

可能您也没有将第一帧放入EDT,请注意代码,这是您真正想要的吗:

import java.awt.event.*;

import javax.swing.*;

public class TwoFrames
{
    private JFrame frame1, frame2;
    private JPanel panel1, panel2;
    private JButton button1, button2, button3;
    private ActionListener action;

    public TwoFrames()
    {               
        frame1 = new JFrame("Frame One");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame2 = new JFrame("Frame Two");
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel1 = new JPanel();      

        action = new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                if (ae.getSource() == button1)
                {
                    // Here goes your code for displaying your Second Frame.
                    SwingUtilities.invokeLater(new Runnable()
                    {
                        public void run()
                        {
                            if (!frame2.isShowing())
                            {                                                           
                                panel2 = new JPanel();

                                button2 = new JButton("Click Me to HIDE FRAME.");
                                button2.setHorizontalTextPosition(AbstractButton.CENTER);
                                button2.setVerticalTextPosition(AbstractButton.CENTER);
                                button2.addActionListener(action);

                                panel2.add(button2);
                                panel2.setOpaque(true);
                                frame2.setContentPane(panel2);

                                frame2.setSize(200, 200);
                                frame2.setLocationRelativeTo(null);
                                frame2.setVisible(true);
                            }
                        }
                    });             
                    button3.setEnabled(false);
                }
                else if (ae.getSource() == button2)
                {
                    frame2.dispose();
                    button3.setEnabled(true);
                }
            }       
        };

        button1 = new JButton("Click Me to Display FRAME.");
        button1.setHorizontalTextPosition(AbstractButton.CENTER);
        button1.setVerticalTextPosition(AbstractButton.CENTER);
        button1.addActionListener(action);          

        button3 = new JButton("Watch Me getting DISABLED");
        button3.setHorizontalTextPosition(AbstractButton.CENTER);
        button3.setVerticalTextPosition(AbstractButton.CENTER);
        button3.addActionListener(action);

        panel1.add(button1);
        panel1.add(button3);
        panel1.setOpaque(true);
        frame1.setContentPane(panel1);      

        frame1.setSize(200, 200);       

        frame1.setVisible(true);
    }

    public static void main(String... args)
    {
        // Here we are Scheducling a JOB for Event Dispatcher Thread.
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()               
            {
                new TwoFrames();
            }
        });
    }
}

请学习java命名约定并遵守它们