目前代码仅隐藏 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);
}
最佳答案
I'm not sure why it's not making it visible when I click the button again.
为什么要这样做,因为 ActionListener 所做的一切(按下按钮时调用的代码)都是不断地将标签设置为不可见?
解决方案是简单地切换其可见性:
lblHello.setVisible(!lblHello.isVisible());
请注意,为了安全起见,最好在进行此类更改后重新验证并重新绘制容器,因此:
btnHide.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lblHello.setVisible(!lblHello.isVisible());
revalidate();
repaint();
}
});
因为这将消除 GUI 中因添加(尤其是删除可见组件)而产生的“脏”像素。
<小时/>对此的一句话:
btnHide.setBounds(185, 199, 89, 23);
这表明您在 setBounds(...)
中使用空布局。虽然对于 Swing 新手来说,这似乎是创建复杂 GUI 的最佳方式,但稍后它会再次困扰他们,因为这意味着 GUI 在一个平台上并且仅在一个平台上看起来不错,并且如果以后您想要增强或改进 GUI,这只能通过很大的困难和 bug 的风险来完成。更好的是学习和使用布局管理器。
另一个建议:
如果您希望在按下按钮时更改 GUI 的外观,那么还可以看看 CardLayout(请检查 CardLayout Tutorial ),因为这可以是一种干净、轻松地交换 View 的方法/em>
<小时/>还有更好的推荐:
由于 JLabel 只显示其文本或图标或两者,因此使其“不可见”的最佳方法是删除其文本和图标,如下 Andrew Thompson 所指出:
// get rid of its text
lblHello.setText("");
// and if needed
lblHello.setIcon(null);
这不适用于文本组件,例如 JTextFields 和 JTextAreas 或其他比 JLabel 具有更多“分量”的组件(包括几乎所有其他用户交互组件)。
关于java - 使用按钮显示/隐藏 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772146/