Нарисуйте JButton, чтобы он выглядел как JLabel (или, по крайней мере, без края кнопки?)
У меня есть JButton, который по разным причинам я хочу действовать как кнопка, но выгляжу как JLabel. На самом деле это не должно быть JLabel под капотом, я просто не хочу, чтобы появившийся край кнопки отображался.
Есть ли простой способ отключить "просмотр кнопки" для JButtons, но сохранить все функциональные возможности кнопок?
Я мог бы создать какой-то сложный гиперклас подкласса, который делегирован jlabel для отображения целей, но я действительно надеюсь, что там что-то в строках button.lookLikeAButton(false)
.
Ответы
Ответ 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?