在网上找的插件,实验可用。转自 https://blog.csdn.net/lycorislqy/article/details/46721121
package nc.impl.cdm.report.iufo.util;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicArrowButton;
/**
* 下拉复选框组件
*
*/
public class MultiComboBox extends JComponent {
private Object[] values;
public Object[] defaultValues;
public Object[] resultValues;
private List<ActionListener> listeners = new ArrayList<ActionListener>();
private MultiPopup popup;
private JTextField editor;
protected JButton arrowButton;
private String valueSperator;
private static final String DEFAULT_VALUE_SPERATOR = ",";
public MultiComboBox(Object[] value, Object[] defaultValue){
this(value,defaultValue,DEFAULT_VALUE_SPERATOR);
}
public MultiComboBox(Object[] value, Object[] defaultValue , String valueSperator) {
values = value;
defaultValues = defaultValue;
this.valueSperator = valueSperator;
initComponent();
}
private void initComponent() {
this.setLayout(new FlowLayout());
popup =new MultiPopup(values,defaultValues);
popup.addActionListener(new PopupAction());
editor = new JTextField();
editor.setBackground(Color.WHITE);
editor.setEditable(false);
editor.setPreferredSize(new Dimension(180,18));
editor.addMouseListener(new EditorHandler());
arrowButton = createArrowButton();
arrowButton.addMouseListener(new EditorHandler());
add(editor);
add(arrowButton);
setText() ;
}
public Object[] getSelectedValues() {
return popup.getSelectedValues();
}
public void addActionListener(ActionListener listener) {
if (!listeners.contains(listener))
listeners.add(listener);
}
public void removeActionListener(ActionListener liste