2016-11-25 6 views
0

Я пытаюсь создать gui в java swing, который позволяет пользователю загружать места с помощью кнопки переключения. Первоначально у меня есть цвет кнопки по умолчанию, чтобы проверить, работает ли событие click. Кнопка должна быть красной, чтобы обозначить, что она забронирована, и пожелтела, чтобы обозначить, что она была заблокирована.JToggleButton в java swing не распознается isSelected() метод?

Вот мой actionPerformed метод

@Override 
public void actionPerformed(ActionEvent e) { 
    GoldSeat seat = (GoldSeat)e.getSource(); 
    if(seat.isSelected()){ 
     seat.setBackground(Color.red); 
    } 
    else 
    { 
     seat.setBackground(Color.yellow); 
    } 
} 

GoldSeat просто производный класс JToggleButton. По какой-то причине, когда я нажимаю кнопку, она не становится красной (она переходит в серый цвет по умолчанию), но когда я ее снова щелкнул, она становится желтой. Таким образом, казалось бы, что «истинное» или «включено» состояние кнопки не работает, но «ложь». Я не знаю, почему isSelected() работает неправильно.

Любая идея, как решить эту проблему?

EDIT: Я бросил вместе быстрый JFrame с одним JToggleButton на нем с помощью простого перетаскивания интерфейс Netbeans, который генерируется этот код:

jToggleButton1 = new javax.swing.JToggleButton(); 
jToggleButton1.setText("jToggleButton1"); 
    jToggleButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jToggleButton1ActionPerformed(evt); 
     } 
    }); 

И событие действия:

private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {            
    if(jToggleButton1.isSelected()){ 
     jToggleButton1.setBackground(Color.red); 
    }else { 
     jToggleButton1.setBackground(Color.yellow); 
    } 
} 

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

+0

'Я делаю что-то не так с моей code? '- может быть, не так, но разные. Я уже сказал, что это вопрос LAF. Возможно, два фрейма используют другой LAF? В любом случае мы не можем сказать, что вы делаете неправильно, основываясь на нескольких случайных строках кода. – camickr

ответ

2

LAF выполняет обычную покраску, когда выбрана кнопка переключения, поэтому настройка фона не влияет.

Возможно, вы сможете использовать UIManager, чтобы контролировать это поведение. Перед тем, как создать любую кнопку переключения, вы можете попробовать:

UIManager.put("ToggleButton.select", Color.RED); 

Это изменит свойство для всех кнопок переключения.

Edit:

Если вы хотите эту функцию только для одной кнопки переключения, вы можете попробовать (не уверен, если он будет работать) что-то вроде:

Color select = UIManager.getColor("ToggleButton.select"); 
UIManager.put("ToggleButton.select", Color.RED); 
JToggleButton button = new JToggleButton(...); 
UIManager.put("ToggleButton.select", select); 
+0

Мне действительно нужно, чтобы работать с отдельными кнопками. Я сделал быстрый JFrame с одним JToggleButton на нем и сумел заставить его работать так, как я этого хотел, но по какой-то причине он не работает в моем основном коде. РЕДАКТИРОВАТЬ: Только что видел ваше редактирование. Я попробую это и посмотрю, как это происходит. –

+0

@ MarkO'Hare, см. Править. Если у вас появилось больше вопросов, разместите свой [mcve], показывая, что вы пробовали. – camickr

+0

Это решение сработало для меня в конце! Спасибо за вашу помощь! –