2015-03-11 2 views
0

JCheckBox Я имею в JComboBox код:Выбрать все JCheckBox в JComboBox

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class CheckCombo implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     JComboBox cb = (JComboBox)e.getSource(); 
     CheckComboStore store = (CheckComboStore)cb.getSelectedItem(); 
     CheckComboRenderer ccr = (CheckComboRenderer)cb.getRenderer(); 
     ccr.checkBox.setSelected((store.state = !store.state)); 
    } 

    private JPanel getContent() 
    { 
     String[] ids = { "north", "west", "south", "east", "ALL" }; 
     Boolean[] values = 
     { 
      Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE 
     }; 
     CheckComboStore[] stores = new CheckComboStore[ids.length]; 
     for(int j = 0; j < ids.length; j++) 
      stores[j] = new CheckComboStore(ids[j], values[j]); 
     JComboBox combo = new JComboBox(stores); 
     combo.setRenderer(new CheckComboRenderer()); 
     combo.addActionListener(this); 
     JPanel panel = new JPanel(); 
     panel.add(combo); 
     return panel; 
    } 

    public static void main(String[] args) 
    { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.getContentPane().add(new CheckCombo().getContent()); 
     f.setSize(300,160); 
     f.setLocation(200,200); 
     f.setVisible(true); 
    } 
} 

/** adapted from comment section of ListCellRenderer api */ 
class CheckComboRenderer implements ListCellRenderer 
{ 
    JCheckBox checkBox; 

    public CheckComboRenderer() 
    { 
     checkBox = new JCheckBox(); 
    } 
    public Component getListCellRendererComponent(JList list, 
                Object value, 
                int index, 
                boolean isSelected, 
                boolean cellHasFocus) 
    { 
     CheckComboStore store = (CheckComboStore)value; 
     checkBox.setText(store.id); 
     checkBox.setSelected(((Boolean)store.state).booleanValue()); 
     checkBox.setBackground(isSelected ? Color.red : Color.white); 
     checkBox.setForeground(isSelected ? Color.white : Color.black); 
     return checkBox; 
    } 
} 

class CheckComboStore 
{ 
    String id; 
    Boolean state; 

    public CheckComboStore(String id, Boolean state) 
    { 
     this.id = id; 
     this.state = state; 
    } 
} 

Как я могу проверить все окна после проверки ALL и «de'check (ложь)

+0

Извините, я не думаю, что ясно, что вы спрашиваете? – dbank

+0

Привет, я хочу установить выбранные ВСЕ предметы («север», «запад», «юг», «восток») после щелчка на ВСЕ 'jcheckbox'., – koubouou

ответ

0

При выборе "ALL" вы все выбрали, когда вы отмените выбор «ВСЕ», вы все отменили выбор. Попробуйте и поиграйте с ним.

public class CheckCombo implements ActionListener { 

    JComboBox combo = null; 

    public void actionPerformed(ActionEvent e) { 

     JComboBox cb = (JComboBox) e.getSource(); 
     CheckComboStore store = (CheckComboStore) cb.getSelectedItem(); 
     CheckComboRenderer ccr = (CheckComboRenderer) cb.getRenderer(); 
     ccr.checkBox.setSelected((store.state = !store.state)); 
     if (store.id.equals("ALL")){ 
      for (int i = 0; i < combo.getItemCount(); i++){ 
       ((CheckComboStore)combo.getItemAt(i)).state = ccr.checkBox.isSelected(); 
      } 
     } 
    } 

    private JPanel getContent() { 

     String[] ids = { "north", "west", "south", "east", "ALL" }; 
     Boolean[] values = { Boolean.TRUE, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, Boolean.FALSE }; 
     CheckComboStore[] stores = new CheckComboStore[ids.length]; 
     for (int j = 0; j < ids.length; j++) 
      stores[j] = new CheckComboStore(ids[j], values[j]); 
     combo = new JComboBox(stores); 
     combo.setRenderer(new CheckComboRenderer()); 
     combo.addActionListener(this); 
     JPanel panel = new JPanel(); 
     panel.add(combo); 
     return panel; 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.getContentPane().add(new CheckCombo().getContent()); 
     f.setSize(300, 160); 
     f.setLocation(200, 200); 
     f.setVisible(true); 
    } 
} 

/** adapted from comment section of ListCellRenderer api */ 
class CheckComboRenderer implements ListCellRenderer { 

    JCheckBox checkBox; 

    public CheckComboRenderer() { 

     checkBox = new JCheckBox(); 
    } 

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 

     CheckComboStore store = (CheckComboStore) value; 
     checkBox.setText(store.id); 
     checkBox.setSelected(((Boolean) store.state).booleanValue()); 
     checkBox.setBackground(isSelected ? Color.red : Color.white); 
     checkBox.setForeground(isSelected ? Color.white : Color.black); 
     return checkBox; 
    } 
} 

class CheckComboStore { 

    String id; 
    Boolean state; 

    public CheckComboStore(String id, Boolean state) { 

     this.id = id; 
     this.state = state; 
    } 
} 
+0

Хорошая работа, спасибо. – koubouou

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