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

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

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

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

Ответы [ 5 ]

26 голосов
/ 12 июня 2010

Вы хотите сделать следующее:

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

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

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

2 голосов
/ 11 июня 2010

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

Например,

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

Текст будет перемещаться вверх и вниз при нажатии кнопки, иКнопка все еще может быть «включена» нажатием, удержанием и «снятием с охраны» путем перемещения мыши из области кнопок.

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

1 голос
/ 11 июня 2010
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
0 голосов
/ 25 июня 2013
 setContentAreaFilled(false);
 setBorderPainted(false);
 setOpaque(false);

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

0 голосов
/ 11 июня 2010

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

...