2009-12-12 4 views
0

Я хочу создать кнопку с пользовательским внешним видом. У меня есть разные изображения, которые можно установить в качестве фона кнопки для обычного, мыши, щелчка мышью, кнопки отключены и т. Д. Я создал свой собственный класс, расширяя javax.swing.JButton и переопределяя метод paintComponent. Как я могу изменить фон кнопки для всех вышеперечисленных состояний.Java Swing JButton

ответ

0
ImageIcon icon = new ImageIcon("images/icon.gif"); 
JButton button = new JButton(icon); 
+0

Спасибо, что ответили yankee2905. Этот код предназначен для установки изображения значка на кнопке. Я хочу знать, как я могу удалить внешний вид кнопки по умолчанию и добавить свои собственные изображения для мыши, мыши и отключенных состояний? – Nilesh

3

JButton имеет ряд простых методов набора для одновременного нажатия клавиш, прессованные, отобранными, инвалидов и инвалидов выбранных состояний - например

button.setPressedIcon(new ImageIcon("images/button-down.png") 

другие методы:

button.setRolloverIcon() 
button.setSelectedIcon() 
button.setRolloverSelectedIcon() 
button.setDisabledIcon() 
button.setDisabledSelectedIcon() 

. ..повеселись !

Кстати, O'Reilly имеет забавную книгу под названием Swing, Hacks с большим количеством маленьких лакомства для игры с качелями: Swing Hacks

4

В дополнение к ответу Стив Де CAUX, вы можете:

  1. Добавить MouseListener, который изменяет в enum переменного, давайте назовем его state на вашем расширенной JButton
  2. В изменённых paintComponent принять во внимание текущие state и рисовать разные фоны. Как

    if (!getModel().isEnabled()) { 
    } else if (state == ButtonState.MOUSE_OVER) { 
    } else if (state == ButtonState.MOUSE_CLICKED) { 
    } 
    
+0

Большое спасибо Божо ... Его работа прекрасна ... Я так счастлив .. Большое спасибо – Nilesh

+1

Тогда почему вы не приняли ответ, чтобы люди знали, что на вопрос был дан ответ? – camickr

2

Вы можете создать пользовательские кнопки интерфейса делегата. Эта запись в блоге: http://blog.elevenworks.com/?p=4 имеет пример для пользовательской панели с вкладками, но принцип тот же. Расширьте BasicButtonUI, реализуйте пользовательский рендеринг, который хотите использовать для кнопки, и затем вызовите setUI() на кнопке.

Это, вероятно, займет больше времени, чем использование существующих API-методов кнопки, чтобы изменить внешний вид, но это дает вам намного больше контроля.

Смежные вопросы