我想制作一个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
这不是什么组合框是“为”。你确定你不想要,例如,与JRadioButtonMenuItem
s的JMenu?
如果你做真的想继续,那么你会使用自定义渲染器,因为你suggested。
1
我们曾经给过这个相同的需求。我们遵守一个全新的组件。 它本质上是一个JPanel
,它有一个文本字段和一个向下箭头按钮。它包含一个JList
,它使用JCheckbox
-派生的ListCellRenderer
。该JList
打包在一个JPopupMenu
这是显示在鼠标点击。
0
你可以看看japura。这是一个基于swing的开源自定义组件。
相关问题
- 1. Java swing复选框
- 2. java swing复选框java swing
- 3. Java swing GUI选中复选框
- 4. java中的数组复选框
- 5. java中的动态复选框
- 6. Netbeans中的Java复选框列表
- 7. 访问复选框在Java
- 8. Java复选框定位
- 9. Java spring form复选框
- 10. 从JComboBox中删除边框
- 11. 在java中动态添加复选框
- 12. 确定在一组复选框中选中的复选框
- 13. 复选框在HeaderTemplate中选择ItemTemplate中的所有复选框
- 14. 的javascript选中复选框
- 15. 选中的复选框
- 16. 的javascript选中复选框
- 17. 复选框和复选框
- 18. 复选框中
- 19. 复选框中
- 20. Java JComboBox选择最后一个值
- 21. Java JComboBox滚动到所选项目
- 22. java JComboBox问题
- 23. jtable复选框单选java旋转
- 24. 复合框与WinForms中的复选框
- 25. 复选框树的实现 - 获取选中的复选框
- 26. 只设置1个在java中选中的复选框
- 27. 硒的webdriver的java:点击复选框
- 28. Jquery选中一个复选框时选中所有复选框
- 29. 复选框中的复选标记
- 30. 与选中的复选框复制行
无法想象任何人都想要改变与comboModel一起选择的复选框 – kleopatra 2011-05-06 14:41:21
我用你的例子来创建一个样本,并得到我们无法从按键上的下拉菜单中选择数据。 例如如果组合文本是第一,第二等。 \t用户按“S”键, \t第二个应该被突出显示/选择。就像在普通的JComboBox中一样。 \t有没有什么办法可以做到这一点,因为我们在我们的应用程序之一,我们需要它。 – sridhar 2015-05-26 10:46:15