20

我有一个 JButton,出于各种原因,我想表现得像一个按钮,但看起来像一个 JLabel。它实际上不必是引擎盖下的 JLabel,我只是不希望凸起的按钮边缘出现。

有没有一种简单的方法可以关闭 JButtons 的“按钮外观”但保留所有按钮功能?

我可以构建某种组合的子类超级按钮,将其委托给 jlabel 用于显示目的,但我真的希望有类似button.lookLikeAButton(false).

4

5 回答 5

31

您将需要执行以下操作:

        setFocusPainted(false);
        setMargin(new Insets(0, 0, 0, 0));
        setContentAreaFilled(false);
        setBorderPainted(false);
        setOpaque(false);

如果您希望它实际绘制焦点,您可能想要排除setFocusPainted(false)(例如,Windows 外观上的虚线边框)。

在我想要一个“仅图标”按钮的情况下,我使用了上面的代码。

于 2010-06-11T20:38:09.323 回答
2

将背景颜色设置为透明,并将边框设置为 EmptyBorder 实例。

例如

   JButton button = new JButton();
   button.setBackground(null);
   button.setOpaque(false);
   button.setBorder(new EmptyBorder());

当您单击按钮时,文本仍然会上下移动,并且仍然可以通过单击、按住和将鼠标移出按钮区域来“解除”按钮来“武装”按钮。

如果您不想要这种行为,那么您可能不想使用按钮,而是使用真正的标签。

于 2010-06-11T18:53:25.570 回答
1
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
于 2010-06-11T19:28:25.000 回答
0
 setContentAreaFilled(false);
 setBorderPainted(false);
 setOpaque(false);

这三行可以解决问题。

于 2013-06-25T13:37:51.937 回答
-1

将鼠标侦听器添加到 JLabel 实际上会更容易吗?你可以在 mousePressed 和 mouseReleased 上调整颜色,然后在 mouseClicked 上做你的动作处理吗?

于 2010-06-11T18:54:28.583 回答