У меня есть 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 look and feel).
Я использовал приведенный выше код в случаях, когда мне нужна была кнопка "только с пиктограммой".
Может быть, на самом деле проще просто добавить слушателя мыши к JLabel? Вы могли бы настраивать цвета при нажатии и отжатии мыши, и выполнять обработку действия при нажатии мыши?
Установите цвет фона прозрачным, а границу - экземпляром EmptyBorder.
Например,
JButton button = new JButton();
button.setBackground(null);
button.setOpaque(false);
button.setBorder(new EmptyBorder());
Текст по-прежнему будет перемещаться вверх и вниз при нажатии на кнопку, и кнопку по-прежнему можно "поставить на охрану", нажав и удерживая, и "снять с охраны", выведя мышь из области кнопки.
Если вы не хотите такого поведения, то вам, вероятно, не стоит использовать кнопку, а лучше использовать настоящую метку.
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?