绘制一个 JButton 使其看起来像一个 JLabel(或者至少没有按钮边缘?)

StackOverflow https://stackoverflow.com/questions/3025320

  •  26-09-2019
  •  | 
  •  

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

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

我可以构建某种组合子类超级按钮,将其委托给 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 上进行操作处理吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top