如何實現過濾式的JComboBox


最近想做一個功能:在ComboBox中實現打幾個字就可以對下拉列表框中的數據進行篩選,比如我數據庫里面有以下幾條信息:我、我的、我的茶、你、你的、你的茶。希望達到的效果是:我在ComboBox中輸入一個字可以實現所有以這個字符開頭的數據才顯示在列表框中。比如我輸入“我”,下面只顯示:我、我的、我的茶。輸入“我的”,則顯示:我的、我的茶。

然后把一個小Demo放出來吧。

package swing;

import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class ZListTest
{
public static void main(String[] args)
{
JFrame jf = new JFrame();
final JComboBox jl = new JComboBox();
JButton j = new JButton("E");
final String[] data = new String[]{"我","我的","我的你","你","你的","你的我","他","他的","他的她","她","她的","她的他","我們的","我們的你","你們的","你們的我","他們的","他們的她","她們的"};
final DefaultComboBoxModel model = new DefaultComboBoxModel();
for(String str : data )
{
model.addElement(str);
}
jl.setEditable(true);
jl.getEditor().getEditorComponent().addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e)
{
jl.setPopupVisible(true);
}
public void keyPressed(KeyEvent e)
{
String str = jl.getEditor().getItem().toString();
model.removeAllElements();

for(int i = 0 ; i < data.length ; i ++)
{
if(data[i].startsWith(str))
{
model.addElement(data[i]);
}
}
jl.setModel(model);
}
public void keyReleased(KeyEvent e)
{
}
});
jf.setLayout(new FlowLayout());
jf.add(jl);
jf.add(j);
jf.setVisible(true);
jf.setSize(300,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com