Настроить стиль JButton

Я работаю над проектом. Я хочу добавить панель инструментов в программное обеспечение, поэтому я поместил несколько кнопок на панель. Однако стиль кнопки по умолчанию не соответствует моим потребностям. Я хочу, чтобы кнопка имела следующие эффекты:

  1. Когда мышь не наводится на кнопку, кнопка должна выглядеть как JLabel. Иконка на кнопке просто выглядит как изображение на панели, т.е. мы видим только иконку на кнопке, а все остальное прозрачно.
  2. Когда указатель мыши наводится на кнопку, появляется граница кнопки. Похоже на настоящую кнопку.

Пример: точно так же, как кнопки на панели инструментов eclipse.


person jjyao    schedule 06.12.2010    source источник


Ответы (4)


Почему бы не использовать JToolbar вместо JPanel?

person Mark Peters    schedule 06.12.2010
comment
+1, ОП говорит, что ему нужна панель инструментов. Не изобретайте велосипед и используйте стандартный компонент панели инструментов. - person camickr; 06.12.2010

Я понял. Ответом на мой вопрос является метод setContentAreaFilled(). Когда указатель мыши наводится на кнопку, вызовите метод setContentAreaFilled(true). В противном случае вызовите setContentAreaFilled (false). Вот относительный код: текст ссылки

person jjyao    schedule 07.12.2010

Итак, вы хотите настроить рендеринг JButton?

Во-первых, для комплексного решения вы можете взглянуть на существующие LnF, такие как Substance (очевидно, это слишком мощное решение для ваших нужд, однако оно может вдохновить вас).

Затем, если вы хотите решить это самостоятельно, вам придется переопределить метод paintComponent.

Для этого первый шаг — создать подкласс JButton.

Затем в своем подклассе начните с переопределения paintComponent(Graphics) метод.

Обратите внимание: если все это слишком сложно для вас, вы также можете взглянуть на setBorderPainted(boolean).

person Riduidel    schedule 06.12.2010

Расширьте JButton и:

  • Просто добавьте к кнопке значок вместо текста.
  • Добавьте MouseMotionListener для захвата наведения, чтобы показать/скрыть границу.
person jzd    schedule 06.12.2010