我有一个 JButton,出于各种原因,我想表现得像一个按钮,但看起来像一个 JLabel。它实际上不必是引擎盖下的 JLabel,我只是不希望凸起的按钮边缘出现。
有没有一种简单的方法可以关闭 JButtons 的“按钮外观”但保留所有按钮功能?
我可以构建某种组合的子类超级按钮,将其委托给 jlabel 用于显示目的,但我真的希望有类似button.lookLikeAButton(false)
.
您将需要执行以下操作:
setFocusPainted(false);
setMargin(new Insets(0, 0, 0, 0));
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
如果您希望它实际绘制焦点,您可能想要排除setFocusPainted(false)
(例如,Windows 外观上的虚线边框)。
在我想要一个“仅图标”按钮的情况下,我使用了上面的代码。
将背景颜色设置为透明,并将边框设置为 EmptyBorder 实例。
例如
JButton button = new JButton();
button.setBackground(null);
button.setOpaque(false);
button.setBorder(new EmptyBorder());
当您单击按钮时,文本仍然会上下移动,并且仍然可以通过单击、按住和将鼠标移出按钮区域来“解除”按钮来“武装”按钮。
如果您不想要这种行为,那么您可能不想使用按钮,而是使用真正的标签。
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
这三行可以解决问题。
将鼠标侦听器添加到 JLabel 实际上会更容易吗?你可以在 mousePressed 和 mouseReleased 上调整颜色,然后在 mouseClicked 上做你的动作处理吗?