java - 使用按钮显示/隐藏 JLabel?

标签 java swing

目前代码仅隐藏 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/

相关文章:

java - Eclipse RCP PropertyTester 永远不会通过菜单可见调用

java - 文档显示架构问题

java - MongoDB(Java): efficient update of multiple documents to different(!)值

java - ComboBoxModel - fireIntervalRemoved 的 removeItem 方法抛出异常

java - 滑动浏览图像的 UI

java - 如何区分用户选择项目和 getSelectedValue()?

java - android自定义列表不显示

java - 使用 maven central 来解决依赖关系(在公司网络内)是否安全?

java - JEdi​​torPane 的 html 中的插入符号位置

java - 添加新值后,记录被覆盖,而不是在 jtable 上添加新行