我已经阅读了文档和教程,并在这里进行了搜索,但没有找到相关信息。
Oracle 教程:如何为 ComboBox 使用自定义渲染器
另一个类似的问题,回答有些模糊
我认为这很重要,因为许多人都问过这个问题,但是没有人能够提供一个简单、可行的示例。所以我必须自己问:
我们如何制作一个带有下拉菜单的组合框,允许我们选择多个选项?
以下方法不起作用:
我们如何实现这一点?
JList
在这里无用,因为我无法让它出现在下拉菜单中。- 在 Swing 中没有
CheckBoxList
。
我们如何实现这一点?
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.List;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
public class ComboOfCheckBox extends JFrame {
public ComboOfCheckBox() {
begin();
}
private void begin() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JTable table = new JTable(new Object[2][2], new String[]{"COL1", "COL2"});
final JCheckBox chx1 = new JCheckBox("Oh");
final JCheckBox chx2 = new JCheckBox("My");
final JCheckBox chx3 = new JCheckBox("God");
String[] values = new String[] {"Oh", "My", "God"};
JCheckBox[] array = new JCheckBox[] {chx1, chx2, chx3};
final JComboBox<JCheckBox> comboBox = new JComboBox<JCheckBox>(array) {
@Override
public void setPopupVisible(boolean visible){
if (visible) {
super.setPopupVisible(visible);
}
}
};
class CheckBoxRenderer implements ListCellRenderer {
private boolean[] selected;
private String[] items;
public CheckBoxRenderer(String[] items) {
this.items = items;
this.selected = new boolean[items.length];
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
JLabel label = null;
JCheckBox box = null;
if (value instanceof JCheckBox) {
label = new JLabel(((JCheckBox)value).getText());
box = new JCheckBox(label.getText());
}
return box;
}
public void setSelected(int i, boolean selected) {
this.selected[i] = selected;
}
}
comboBox.setRenderer(new CheckBoxRenderer(values));
panel.add(comboBox);
panel.add(new JCheckBox("Another"));
getContentPane().add(panel);
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ComboOfCheckBox frame = new ComboOfCheckBox();
}
});
}
}
我们如何制作一个带有下拉菜单的组合框,允许我们选择多个选项?
== 1. 弹出窗口在某些操作、选择(鼠标/键盘事件)后是否会消失并保持可见,2. 然后问题是你如何/你想要隐藏弹出窗口(以避免混淆用户)。 - mKorbel@Override public void setPopupVisible(boolean visible){ if (visible) { super.setPopupVisible(visible); } }
。关键在于:只监听visible==true
的情况。当弹出菜单通知visible==false
时,忽略它。而当我点击其他地方时,弹出菜单会隐藏起来。运行我的SCCEE,你就能看到效果。 - WesternGunJPopupMenu
。它允许在弹出窗口中显示JCheckBoxMenuItems
。请参考Table Column Adjuster以了解这种方法的示例。 - camickr