Я работаю в JBuilder 2007, для разработки оконного интерфейса использую библиотеку Swing. В Swing есть компонент JComboBox--комбобокс, у которого справа отображена стрелка вниз. При нажатии на эту стрелку пользователю выпадает список элементов в комбобоксе. Но это у обычного комбобокса. Я же сделал комбобокс, чьи элементы--чекбоксы, из которых пользователь выбирает нужные (путём нажатия левой кнопки "мыши"). Вот код этого моего комбобокса с чекбоксами: 1) класс CheckCombo Код | import java.util.Vector;
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.plaf.*; import javax.swing.plaf.basic.*; import java.awt.Dimension; import javax.swing.table.*;
public class CheckCombo extends JComboBox { /* static class MyCheckBoxUI extends BasicCheckBoxUI { public static ComponentUI createUI(JComponent c) { return new MyCheckBoxUI(); } } */ public CheckCombo() { // TODO Auto-generated constructor stub addStuff(); //setVisible(true); //setEnabled(true); }
public CheckCombo(ComboBoxModel aModel) { super(aModel); addStuff(); initialize(); // TODO Auto-generated constructor stub //CheckComboRenderer renderer = new CheckComboRenderer(); //setRenderer(renderer); //addActionListener(this); //setVisible(true); //setEnabled(true); }
public CheckCombo(Object[] items) { super(items); addStuff(); initialize(); // TODO Auto-generated constructor stub //CheckComboRenderer renderer = new CheckComboRenderer(); //setRenderer(renderer); //addActionListener(this); //setVisible(true); //setEnabled(true); }
public CheckCombo(Vector<?> items) { super(items); addStuff(); initialize(); // TODO Auto-generated constructor stub //CheckComboRenderer renderer = new CheckComboRenderer(); //setRenderer(renderer); //addActionListener(this); //setVisible(true); //setEnabled(true); } private void addStuff() { setRenderer(new CheckComboRenderer()); addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { itemSelected(); } }); }
private void itemSelected() { if (getSelectedItem() instanceof JCheckBox) { JCheckBox jcb = (JCheckBox)getSelectedItem(); jcb.setSelected(!jcb.isSelected()); } } class CheckComboRenderer implements ListCellRenderer { private JLabel defaultLabel; public CheckComboRenderer() { setOpaque(true); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (value instanceof Component) { Component c = (Component)value; if (isSelected==true) { c.setBackground(list.getSelectionBackground()); c.setForeground(list.getSelectionForeground()); } else { c.setBackground(list.getBackground()); c.setForeground(list.getForeground()); } return c; } else { if (defaultLabel==null) { if (value!=null) { defaultLabel = new JLabel(value.toString()); } else { defaultLabel = new JLabel(); } } else { if (value!=null) { defaultLabel.setText(value.toString()); } else { defaultLabel.setText(""); } } return defaultLabel; } } }
/** * This method initializes this * */ private void initialize() { //this.setSize(new Dimension(124, 20)); //this.setPreferredSize(new Dimension(124, 20)); } } // @jve:decl-index=0:visual-constraint="10,10"
|
2) объект класса CheckCombo: Код | private CheckCombo getMycombo1() { if (mycombo1==null) { mycombo1 = new CheckCombo(); mycombo1.removeAll(); mycombo1.removeAllItems(); mycombo1.setBounds(new Rectangle(570,75,220,75)); mycombo1.setEnabled(true); mycombo1.setMaximumSize(new Dimension(179,20)); mycombo1.setMinimumSize(new Dimension(179,20)); mycombo1.setPreferredSize(new Dimension(179,20)); mycombo1.setVisible(true); } return mycombo1; }
|
У меня в этом комбобоксе не отображается стрелка вниз, которая есть у обычного комбобокса. Но всё остальное работает--при нажатии на сам комбобокс выскакивают элементы (чекбоксы), которые можно выделить "мышью". Можно ли сделать так, чтобы в этом моём комбобоксе с чекбоксами отображалась бы справа стрелка вниз, как и у обычного комбобокса? Если это можно сделать, то каким способом?
|