我有一个屏幕,其中一个组件根据布尔值变为不可见。如果在创建屏幕后布尔值发生变化,如何刷新屏幕以将其考虑在内?
答案 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
这样的布局管理器也可以解决“重新布局”页面的问题。