Я хотел бы сделать JComboBox, который имеет флажки для элементов вместо текста. Кроме того, должно быть возможно проверять несколько элементов и извлекать выбранные элементы из компонента. Должен ли я создавать пользовательские ComboBoxUI, ComboBoxEditor, ListCellRenderer, ComboPopUp или что-то другое? Есть ли существующий элемент управления Java, который делает это?Java - флажки в JComboBox
2
A
ответ
5
Это было довольно легко реализовать. Нашел здесь link text
/* * The following code is adapted from Java Forums - JCheckBox in JComboBox URL: http://forum.java.sun.com/thread.jspa?forumID=257&threadID=364705 Date of Access: July 28 2005 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*;
public class JComboCheckBox extends JComboBox {
public JComboCheckBox() { addStuff(); }
public JComboCheckBox(JCheckBox[] items) { super(items); addStuff(); }
public JComboCheckBox(Vector items) { super(items); addStuff(); }
public JComboCheckBox(ComboBoxModel aModel) { super(aModel); addStuff(); }
private void addStuff() {
setRenderer(new ComboBoxRenderer());
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) { itemSelected(); }
});
}
private void itemSelected() {
if (getSelectedItem() instanceof JCheckBox) {
JCheckBox jcb = (JCheckBox)getSelectedItem();
jcb.setSelected(!jcb.isSelected());
}
}
class ComboBoxRenderer implements ListCellRenderer {
private JLabel defaultLabel;
public ComboBoxRenderer() { 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) {
c.setBackground(list.getSelectionBackground());
c.setForeground(list.getSelectionForeground());
} else {
c.setBackground(list.getBackground());
c.setForeground(list.getForeground());
}
return c;
} else {
if (defaultLabel==null) defaultLabel = new JLabel(value.toString());
else defaultLabel.setText(value.toString());
return defaultLabel;
}
}
}
}
1
Это не те комбо-боксы, которые «за». Вы уверены, что не хотите, скажем, JMenu с JRadioButtonMenuItem
?
Если вы do действительно хотите продолжить, тогда вы будете использовать собственный рендерер, как вы, suggested.
1
Мы как-то получили такое же самое требование. Мы выполнили совершенно новый компонент. Это был по существу JPanel
который имел текстовое поле и кнопку со стрелкой вниз. Он содержал JList
, в котором использовался JCheckbox
-полученный ListCellRenderer
. JList
был упакован в JPopupMenu
, который отображался щелчками мыши.
0
Вы посмотрите на japura может. Это пользовательский компонент с открытым исходным кодом, основанный на качелях.
не может представить, что кто-то хочет изменить флажок, выбранный вместе с comboModel selected – kleopatra
Я использовал ваш пример для создания образца и получил, что мы не можем выбрать данные из раскрывающегося списка при нажатии клавиши. , например. если комбинированный текст - первый, второй и т. д. \t Пользователь нажимает клавишу «S», \t Второй должен быть выделен/выбран. Как в обычном JComboBox. \t Есть ли способ сделать это, как в одном из моих приложений, нам это нужно. – sridhar