2011-02-06 63 views
2

是否可以将JCheckBox组件添加到JComboBox中?如果是这样,怎么样?JCheckBox组件可以添加到JComboBoxes吗?

+0

使用`CellRenderer`做到这一点。 – 2011-02-06 07:13:41

+0

将JCheckBox添加到JComboBox中意味着什么?你想达到什么目标? – 2011-02-06 07:15:23

回答

3

有几种方法可以将JCheckBox插入到JComboBoxes中,但它不像在Jable中使用它们那么简单,因为JComboBoxes不使用单元编辑器,只使用渲染器。让我们来看看,如果我能重新找到这对谷歌....

请点击这里:JComboCheckBox
这里:Check Boxes in a Combobox

1
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" }; 
     Boolean[] values = 
     { 
      Boolean.TRUE, 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; 
    } 
} 
相关问题