目前代码只隐藏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);
}
答案 0 :(得分:4)
当我再次点击按钮时,我不确定为什么它不会显示。
为什么要这样,因为所有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),因为这可以是一种干净利落地交换的方式视图
更好的建议:
由于JLabel仅显示其文本或其图标或两者,因此将其“隐身”的最佳方法是删除其文本及其图标,如Andrew Thompson所述:
// get rid of its text
lblHello.setText("");
// and if needed
lblHello.setIcon(null);
这对于JTextFields和JTextAreas等文本组件或者比JLabel具有更多“重量”的其他组件(包括几乎所有其他用户交互组件)都不起作用。
答案 1 :(得分:2)
尝试:
btnChangeLabelVisibilityButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lblHello.setVisible(!lblHello.isVisible());
}
});