2011-02-06 3 views
2

JCheckBox 구성 요소를 JComboBox에 추가 할 수 있습니까? 그렇다면 어떻게?JCheckBox 구성 요소를 JComboBox에 추가 할 수 있습니까?

+0

사용'CellRenderer'이 작업을 수행 할 수 있습니다. –

+0

JCheckBox를 JComboBox에 추가하면 무엇을 의미합니까? 달성하고자하는 것은 무엇입니까? –

+0

나는 JComboBox 즉, 그 항목의 목록을 그 JComboBox 목록에서 일부 항목을 선택해야합니다 .. –

답변

3

JComboBoxes에 JCheckBoxes를 지미할 수있는 방법이 있지만 JComboBoxes가 셀 편집기를 사용하지 않고 렌더러 만 사용하기 때문에 JTable에서 JCheckBox를 사용하는 것과 거의 똑같지는 않습니다.

여기에서 확인하시기 바랍니다 .... 나는 Google에서이 문제를 다시 찾을 수 있는지 보자 : 여기 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; 
    } 
} 
+0

나는 그것이 누군가가 원하는 것 같지 않아요 : 드롭 다운을 열고 목록에서 키보드로 탐색 – kleopatra