用按钮显示/隐藏JLabel?

时间:2017-01-20 20:50:13

标签: 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);

}

2 个答案:

答案 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());
    }
});