2012-01-21 3 views
0

Код, который я создаю, включает JRadioButton и JComboBox. Я хочу, чтобы JComboBox был включен, если JRadioButton выбран и отключен, если он не выбран или не выбран. Моя проблема в том, что JComboBox не будет отключен, если я отключу JRadioButton. Как я могу это сделать? Вот мой кодНе выбрано JRadioButton

LouisClub=new JComboBox(); 
    LouisClub.setEnabled(false); 

    LouisClub.addItem("Writer"); 
    LouisClub.addItem("Photojournalist"); 
    LouisClub.addItem("Cartoonist"); 
    LouisClub.addItem("Layout Artist"); 

    Louis=new JRadioButton("The Louisian"); 

    Louis.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      LouisClub.setEnabled(true); 
     } 
    }); 
+0

Для лучшей помощи рано, опубликовать [SSCCE] (http://sscce.org/). –

+2

, пожалуйста, изучите соглашения об именах java и придерживайтесь их – kleopatra

ответ

1

Вы должны JCheckBox вместо JRadioButton для таких вещей, а затем вам нужно проверить CheckBox статус в actionPerformed() метод и на основе этого включить/отключить ComboBox. Что-то вроде

Louis=new JCheckBox(); 
Louis.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     LouisClub.setEnabled(((JCheckBox)e.getSource()).isSeleted()); 
    } 
} 

Также это может быть хорошим (не уверен) использовать ChangeListener вместо ActionListener.

Louis.addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent ce) { 
      LouisClub.setEnabled(((JCheckBox)ce.getSource()).isSeleted()); 
     } 
    }); 
+0

Спасибо за вашу помощь –

1

Вы должны использовать ItemListener вместо ActionListener. Вот код:

public class Toto extends JPanel { 

    private JComboBox LouisClub; 
    private JRadioButton Louis; 

    /** 
    * Create the panel. 
    */ 
    public Toto() { 
     LouisClub = new JComboBox(); 
     LouisClub.setEnabled(false); 

     LouisClub.addItem("Writer"); 
     LouisClub.addItem("Photojournalist"); 
     LouisClub.addItem("Cartoonist"); 
     LouisClub.addItem("Layout Artist"); 

     Louis = new JRadioButton("The Louisian"); 

     Louis.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent e) { 
       boolean ok = e.getStateChange()==ItemEvent.SELECTED; 
       LouisClub.setEnabled(ok); 
      } 
     }); 

     add(Louis); 
     add(LouisClub); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setContentPane(new Toto()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

У меня есть еще два замечания сделать:

  1. Java developpers использовать, чтобы не использовать заглавные буквы в начале своих переменных (они предпочитают louisClub к LouisClub)
  2. Мой главный метод работает, но не лучший способ создать окно (см. Руководство по java для получения дополнительной информации).

свиданья,

Жан-Марк

+0

Я просто студент не профессиональный разработчик Java, поэтому я не понимаю, почему мне нехорошо назвать мои переменные, но я хочу. –

+0

Ваш код будет работать, но он будет казаться странным для «профессиональных» разработчиков. Все объяснено там: http://www.oracle.com/technetwork/java/codeconvtoc-136057.html –

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