我想製作一個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 JComboBox更新組合框
- 2. Java swing複選框
- 3. java swing複選框java swing
- 4. Java swing GUI選中複選框
- 5. 刪除複選框中的複選框
- 6. java中的動態複選框
- 7. java中的數組複選框
- 8. IHM與Java中的複選框
- 9. Netbeans中的Java複選框列表
- 10. Java中的嵌套複選框
- 11. JComboBox的Java JTable
- 12. 基於JComboBox選擇打開新框架
- 13. 的Java MYSQL使用複選框選擇
- 14. 對話框中的JComboBox
- 15. 訪問複選框在Java
- 16. Java複選框問題
- 17. 複選框Html Java腳本
- 18. Java spring form複選框
- 19. Java複選框定位
- 20. Java複選框操作
- 21. 的JComboBox在Java中,聲明
- 22. 從JComboBox中刪除邊框
- 23. MVC - 如何獲取選中的複選框中的複選框
- 24. 在java中動態添加複選框
- 25. 複選框在HeaderTemplate中選擇ItemTemplate中的所有複選框
- 26. 確定在一組複選框中選中的複選框
- 27. 選中的複選框
- 28. 的javascript選中複選框
- 29. 的javascript選中複選框
- 30. jQuery的複選框選中
無法想象任何人都想要改變與comboModel一起選擇的複選框 – kleopatra 2011-05-06 14:41:21
我用你的例子來創建一個樣本,並得到我們無法從按鍵上的下拉菜單中選擇數據。 例如如果組合文本是第一,第二等。 \t用戶按「S」鍵, \t第二個應該被突出顯示/選擇。就像在普通的JComboBox中一樣。 \t有沒有什麼辦法可以做到這一點,因爲我們在我們的應用程序之一,我們需要它。 – sridhar 2015-05-26 10:46:15