当前位置: 代码迷 >> Eclipse >> JCombox模糊不清匹配。点击Item,鼠标事件为什么没用
  详细解决方案

JCombox模糊不清匹配。点击Item,鼠标事件为什么没用

热度:87   发布时间:2016-04-23 01:15:57.0
JCombox模糊匹配。点击Item,鼠标事件为什么没用?

/**
 * 模糊匹配的Jcombox控件
 * 2012-9-19 下午04:18:57
 */
public class AutoFillCombox extends JComboBox
{
// 可选项
private ArrayList<String> items = null;

public AutoFillCombox(ArrayList<String> items)
{
super();
if(items == null)
{
items = new ArrayList<String>();
}
this.items = items;
setupAutoComplete(items);
}

// 是否调整
private boolean isAdjusting(JComboBox cbInput)
{
if(cbInput.getClientProperty("is_adjusting") instanceof Boolean)
{
return (Boolean) cbInput.getClientProperty("is_adjusting");
}
return false;
}

/**
 * @param cbInput
 *            设置调整
 * @param adjusting void
 */
private void setAdjusting(JComboBox cbInput,boolean adjusting)
{
cbInput.putClientProperty("is_adjusting", adjusting);
}

public void setupAutoComplete(final ArrayList<String> items)
{
final DefaultComboBoxModel model = new DefaultComboBoxModel();
setModel(model);
setEditable(true);
setAdjusting(this, false);
setSelectedItem(null);
final JTextField txtInput = (JTextField) getEditor().getEditorComponent();
this.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if( !isAdjusting(AutoFillCombox.this))
{
if(AutoFillCombox.this.getSelectedItem() != null)
{
txtInput.setText(AutoFillCombox.this.getSelectedItem().toString());
}
}
}
});

// 支持键盘事件
txtInput.addKeyListener(new KeyAdapter()
{

@Override
public void keyPressed(KeyEvent e)
{
setAdjusting(AutoFillCombox.this, true);
if(e.getKeyCode() == KeyEvent.VK_SPACE)
{
if(AutoFillCombox.this.isPopupVisible())
{
e.setKeyCode(KeyEvent.VK_ENTER);
}
}
if(e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN)
{
e.setSource(AutoFillCombox.this);
AutoFillCombox.this.dispatchEvent(e);
if(e.getKeyCode() == KeyEvent.VK_ENTER)
{
if(AutoFillCombox.this.getSelectedItem() != null)
  相关解决方案