Java JFrame没有更新按钮的设置



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

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

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

我通过以下操作将按钮设置为禁用:PrintBttn.setEnabled(false);

我试着打电话给mainPanel.revalidate(); mainPanel.repaint(); PrintBttn.revalidate(); PrintBttn.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();
            }
        });
    }
}

相关内容

  • 没有找到相关文章

最新更新