Потяните JButton для сходства с JLabel (или по крайней мере без края кнопки?)

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

Существует ли простой способ выключить "кнопку", ищут JButtons, но сохраняют всю функциональность кнопки?

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

18
задан Electrons_Ahoy 11 June 2010 в 18:36
поделиться

4 ответа

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

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

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

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

27
ответ дан 30 November 2019 в 08:10
поделиться

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

-1
ответ дан 30 November 2019 в 08:10
поделиться

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

Например,

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

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

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

2
ответ дан 30 November 2019 в 08:10
поделиться
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
1
ответ дан 30 November 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: