Java 使用按钮显示/隐藏JLabel?

Java 使用按钮显示/隐藏JLabel?,java,swing,Java,Swing,当前,代码仅隐藏JLabel。我不确定当我再次点击按钮时,为什么它不能使它可见。希望这是一个简单的解决办法 contentPane.add(btnSwap); btnHide.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { lblHello.setVisible(false); }

当前,代码仅隐藏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);

}
我不确定当我再次点击按钮时,为什么它不能使它可见

既然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);
这表明您正在使用带有收进框的空布局。。。。虽然这对新手Swing程序员来说似乎是创建复杂GUI的最佳方式,但稍后会再次困扰他们,因为这将意味着GUI在一个平台和一个平台上看起来正常,并且如果以后您想要增强或改进GUI,那么这只能在很大的困难和错误风险下完成。更好的方法是学习和使用布局管理器

另一项建议:

如果您希望在按下按钮时更改GUI的外观,那么也可以查看CardLayout,请检查,因为这是一种干净、轻松地交换视图的方法

还有一个更好的建议:

由于JLabel仅显示其文本或图标或两者,因此使其不可见的最佳方法是删除其文本和图标,如Andrew Thompson所述:

// get rid of its text
lblHello.setText("");

// and if needed
lblHello.setIcon(null);
这不适用于文本组件,例如JTextFields和jtextarea,或者其他比JLabel更重要的组件,包括几乎所有其他用户交互组件

我不确定当我再次点击按钮时,为什么它不能使它可见

既然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);
这表明您正在使用带有收进框的空布局。。。。虽然这对新手Swing程序员来说似乎是创建复杂GUI的最佳方式,但稍后会再次困扰他们,因为这将意味着GUI在一个平台和一个平台上看起来正常,并且如果以后您想要增强或改进GUI,那么这只能在很大的困难和错误风险下完成。更好的方法是学习和使用布局管理器

另一项建议:

如果您希望在按下按钮时更改GUI的外观,那么也可以查看CardLayout,请检查,因为这是一种干净、轻松地交换视图的方法

还有一个更好的建议:

由于JLabel仅显示其文本或图标或两者,因此使其不可见的最佳方法是删除其文本和图标,如Andrew Thompson所述:

// get rid of its text
lblHello.setText("");

// and if needed
lblHello.setIcon(null);
这不适用于文本组件,如JTextFields和JTextAreas,或比JLabel更重要的其他组件,包括几乎所有其他用户交互组件。

尝试:

btnChangeLabelVisibilityButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        lblHello.setVisible(!lblHello.isVisible());
    }
}); 
尝试:


如果您希望在按下按钮时更改GUI的外观,那么也可以看看CardLayout,这对我来说是最好的建议。话虽如此,让标签消失的另一种方法是label.setIconnull;label.setText@安德烈霍姆普森:对你说:当然,你是绝对正确的!对自己说:哦!!不过我还是更喜欢卡片布局的想法。从标签中删除文本或图标可能会更改其他组件的位置。这在我的记忆中是新鲜的,因为当文本发生变化时,通过将其替换为一个配置为标签的文本字段来“修复”标签,移动其他组件。哦,天哪,黑客攻击来势汹汹;如果您希望在按下按钮时更改GUI的外观,那么也可以看看CardLayout,这对我来说是最好的建议。话虽如此,让标签消失的另一种方法是label.setIconnull;label.setText@安德烈霍姆普森:对你说:当然,你是绝对正确的!对自己说:哦!!不过我还是更喜欢卡片布局的想法。从标签中删除文本或图标可能会更改其他组件的位置。这在我的记忆中是新鲜的,因为当文本发生变化时,通过将其替换为一个配置为标签的文本字段来“修复”标签,移动其他组件。哦,天哪,黑客攻击来势汹汹;您尚未提供完整代码,但我建议您确保重新验证lblHello对象的父对象,以便重新绘制它以反映您的更改。您尚未提供完整代码,但我建议 请确保重新验证lblHello对象的父对象,以便重新绘制该对象以反映您的更改。