Подтвердить что ты не робот

Нарисуйте JButton, чтобы он выглядел как JLabel (или, по крайней мере, без края кнопки?)

У меня есть JButton, который по разным причинам я хочу действовать как кнопка, но выгляжу как JLabel. На самом деле это не должно быть JLabel под капотом, я просто не хочу, чтобы появившийся край кнопки отображался.

Есть ли простой способ отключить "просмотр кнопки" для JButtons, но сохранить все функциональные возможности кнопок?

Я мог бы создать какой-то сложный гиперклас подкласса, который делегирован jlabel для отображения целей, но я действительно надеюсь, что там что-то в строках button.lookLikeAButton(false).

4b9b3361

Ответ 1

Вам нужно будет сделать следующее:

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

Возможно, вы захотите исключить setFocusPainted(false), если хотите, чтобы он фактически рисовал фокус (например, пунктирная линия границы на вид и внешний вид Windows).

Я использовал приведенный выше код в тех случаях, когда мне нужна кнопка "только значок".

Ответ 2

Установите цвет фона прозрачным, а рамка - в экземпляр EmptyBorder.

например.

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

Текст будет по-прежнему перемещаться вверх и вниз по мере нажатия кнопки, и кнопка все равно может быть "вооружена" нажатием, удерживанием и "снятием с охраны", перемещая мышь из области кнопок.

Если вы не хотите этого поведения, то, вероятно, вы не хотите использовать кнопку и вместо этого используйте реальную метку.

Ответ 3

button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?

Ответ 4

 setContentAreaFilled(false);
 setBorderPainted(false);
 setOpaque(false);

Эти три строки делают трюк.

Ответ 5

Может ли быть проще просто добавить слушателя мыши в JLabel? Вы можете настроить цвета на mousePressed и mouseReleased и выполнить обработку действий на mouseClicked?