Java JComboBox过滤器
我有一个JComboBox,它有可编辑属性Java JComboBox过滤器,java,swing,autocomplete,filtering,jcombobox,Java,Swing,Autocomplete,Filtering,Jcombobox,我有一个JComboBox,它有可编辑属性true。 我想知道我是否有一个列表添加到JComboBox中,是否可能 例如,我将新字符串[]{“a”、“a1”、“b”、“c”、“a3”}添加到具有可编辑true属性的JComboBox中。当我在JComboBox上输入a时,将返回新字符串[]{“a”、“a1”、“a3”}的列表 这可能吗 提前感谢。最简单的方法是使用,然后弹出列表返回筛选的项目以下是您需要做的事情。 创建一个arrayList或List并将所有项目添加到其中。 创建combobox
true
。
我想知道我是否有一个列表
添加到JComboBox中,是否可能
例如,我将新字符串[]{“a”、“a1”、“b”、“c”、“a3”}
添加到具有可编辑true
属性的JComboBox中。当我在JComboBox上输入a
时,将返回新字符串[]{“a”、“a1”、“a3”}
的列表
这可能吗
提前感谢。最简单的方法是使用,然后弹出列表返回筛选的项目以下是您需要做的事情。 创建一个arrayList或List并将所有项目添加到其中。 创建combobox并循环所有项目,然后将其添加到combobox 然后创建一个过滤器方法。 这不是一个完美的答案,但它会让你走
public class FilterComboBoxText {
private JFrame frame;
private final JComboBox comboBox = new JComboBox();
private static List<String>listForComboBox= new ArrayList<String>();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FilterComboBoxText window = new FilterComboBoxText();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
listForComboBox.add("Lion");
listForComboBox.add("LionKing");
listForComboBox.add("Mufasa");
listForComboBox.add("Nala");
listForComboBox.add("KingNala");
listForComboBox.add("Animals");
listForComboBox.add("Anims");
listForComboBox.add("Fish");
listForComboBox.add("Jelly Fish");
listForComboBox.add("I am the boss");
}
public FilterComboBoxText() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 412, 165);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
comboBox.setEditable(true);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
}
});
for(String detail : listForComboBox) {
comboBox.addItem(detail);
}
final JTextField textfield = (JTextField) comboBox.getEditor().getEditorComponent();
textfield.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if(!textfield.getText().isEmpty()){
comboBoxFilter(textfield.getText());
}
}
});
}
});
comboBox.setBounds(10, 39, 364, 29);
frame.getContentPane().add(comboBox);
}
public void comboBoxFilter(String enteredText) {
System.out.println(comboBox.getItemCount());
if (!comboBox.isPopupVisible()) {
comboBox.showPopup();
}
List<String> filterArray= new ArrayList<String>();
for (int i = 0; i < listForComboBox.size(); i++) {
if (listForComboBox.get(i).toLowerCase().contains(enteredText.toLowerCase())) {
filterArray.add(listForComboBox.get(i));
}
}
if (filterArray.size() > 0) {
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
model.removeAllElements();
model.addElement("");
for (String s: filterArray)
model.addElement(s);
JTextField textfield = (JTextField) comboBox.getEditor().getEditorComponent();
textfield.setText(enteredText);
}
}
}
公共类过滤器ComboxText{
私有JFrame;
私有最终JComboBox组合框=新JComboBox();
私有静态ListForComboBox=new ArrayList();
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
FilterComboxText窗口=新建FilterComboxText();
window.frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
listForComboBox.add(“Lion”);
listForComboBox.add(“LionKing”);
listForComboBox.add(“Mufasa”);
listForComboBox.add(“Nala”);
listForComboBox.add(“KingNala”);
listForComboBox.add(“动物”);
添加(“动画”);
listForComboBox。添加(“鱼”);
添加(“水母”);
添加(“我是老板”);
}
公共过滤器ComboxText(){
初始化();
}
私有void初始化(){
frame=新的JFrame();
框架.立根(100100412165);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
comboBox.setEditable(真);
comboBox.addItemListener(新的ItemListener(){
公共无效itemStateChanged(ItemEvent arg0){
}
});
for(字符串详细信息:listForComboBox){
comboBox.addItem(详细信息);
}
最终的JTextField textfield=(JTextField)组合框。getEditor().getEditorComponent();
addKeyListener(新的KeyAdapter(){
公开无效密钥已释放(密钥事件){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
如果(!textfield.getText().isEmpty()){
comboBoxFilter(textfield.getText());
}
}
});
}
});
组合框.立根(10,39,364,29);
frame.getContentPane().add(组合框);
}
public void ComboxFilter(字符串输入文本){
System.out.println(comboBox.getItemCount());
如果(!comboBox.isPopupVisible()){
comboBox.showPopup();
}
List filterArray=new ArrayList();
对于(int i=0;i0){
DefaultComboxModel=(DefaultComboxModel)comboBox.getModel();
model.removeAllElements();
模型.附录(“”);
用于(字符串s:filterArray)
模型.附录;
JTextField textfield=(JTextField)comboBox.getEditor().getEditorComponent();
textfield.setText(enteredText);
}
}
}
当然这个选项有很多变体,但我建议不要使用,我同意,这段代码已经正确地实现了所有侦听器、其事件和通知程序,问题是我在哪里可以看到它的短编码版本?我忘了有非常好的替代方案SwingX已经为一堆JComponents实现了decorator,我理解,关于问题短编码版本
我认为不可能将一堆重要方法打包到“压缩版本”