Java刷新屏幕

时间:2010-04-21 06:47:08

标签: java swing

我有一个屏幕,其中一个组件根据布尔值变为不可见。如果在创建屏幕后布尔值发生变化,如何刷新屏幕以将其考虑在内?

4 个答案:

答案 0 :(得分:3)

如果您正在处理JComponents,我认为revalidate()更合适。

来自JavaDoc:

  

支持延迟自动布局。

     

调用invalidate,然后将此组件的validateRoot添加到需要验证的组件列表中。在调度所有当前挂起的事件之后将进行验证。换句话说,在调用此方法之后,将验证在向上遍历此组件的包含层次结构时找到的第一个validateRoot(如果有)。默认情况下,JRootPane,JScrollPane和JTextField从isValidateRoot返回true。

     

当属性值发生更改以使此组件的大小,位置或内部布局受到影响时,将自动在此组件上调用此方法。这种自动更新与AWT不同,因为程序通常不再需要调用validate来获取GUI的内容以进行更新。

答案 1 :(得分:2)

调用需要布局的容器上的validate()方法 - 可能是窗口的内容窗格。

答案 2 :(得分:1)

尝试拨打repaint(),然后拨打paintComponent()

答案 3 :(得分:1)

我认为(使用Java 6?)你不需要做任何事情......这应该自动发生 - 不是吗?

通过以下示例,它会自动发生......

public class TT extends JFrame
{
    public TT()
    {
        setLayout(new FlowLayout());
        JLabel label = new JLabel();
        label.setText("Label:");
        add(label);

        final JTextField textField = new JTextField();
        add(textField);

        JButton button = new JButton();
        button.setText("Button");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                if (textField.isVisible())
                {
                    textField.setVisible(false);
                }
                else
                {
                    textField.setVisible(true);
                }
            }
        });
        add(button);
    setSize(100,100);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                TT frame = new TT();
                frame.setDefaultCloseOperation(TT.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

[添加]使用像GridBagLayout这样的布局管理器也可以解决“重新布局”页面的问题。