目前该代码仅隐藏 JLabel。我不确定为什么当我再次单击按钮时它不可见。希望这是一个简单的修复
contentPane.add(btnSwap);
btnHide.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lblHello.setVisible(false);
}
});
contentPane.add(btnHide);
btnHide.setBounds(185, 199, 89, 23);
lblHello.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么当我再次单击按钮时它不可见。
为什么要这样做,因为 ActionListener 所做的(按下按钮时调用的代码)是不断地将标签设置为不可见?
一种解决方案是简单地切换其可见性:
lblHello.setVisible(!lblHello.isVisible());
Run Code Online (Sandbox Code Playgroud)
请注意,为了安全起见,最好在进行此类更改后重新验证并重新绘制容器,因此:
btnHide.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lblHello.setVisible(!lblHello.isVisible());
revalidate();
repaint();
}
});
Run Code Online (Sandbox Code Playgroud)
因为这将消除 GUI 中的“脏”像素,这些像素可能因添加尤其是删除可见组件而出现。
关于这句话:
btnHide.setBounds(185, 199, 89, 23);
Run Code Online (Sandbox Code Playgroud)
这表明您正在使用带有setBounds(...). 虽然这在新手 Swing 程序员看来通常是创建复杂 GUI 的最佳方式,但它以后会再次困扰他们,因为这意味着 GUI 在一个平台和一个平台上看起来都不错,如果以后你想增强或改进 GUI,它只能以很大的难度和错误的风险来完成。更好的是学习和使用布局管理器。
另一个建议:
如果您希望在按下按钮时更改 GUI 的外观,那么还可以查看 CardLayout(请查看CardLayout 教程),因为这可以是一种干净且轻松地交换视图的方法
还有一个更好的建议:
由于 JLabel 仅显示其文本或其图标或两者,因此使其“不可见”的最佳方法是删除其文本及其图标,如下面的 Andrew Thompson 所述:
// get rid of its text
lblHello.setText("");
// and if needed
lblHello.setIcon(null);
Run Code Online (Sandbox Code Playgroud)
这不适用于诸如 JTextFields 和 JTextAreas 之类的文本组件或其他比 JLabel 具有更多“重量”的组件,包括几乎所有其他用户交互组件。