让JTextField添加“自动完成”功能 (三)

2014-11-24 08:17:13 · 作者: · 浏览: 1
nput.setSelectedItem(null);
56 cbInput.addActionListener(new ActionListener() {
57 @Override
58 public void actionPerformed(ActionEvent e) {
59 if (!isAdjusting(cbInput)) {
60 if (cbInput.getSelectedItem() != null) {
61 txtInput.setText(cbInput.getSelectedItem().toString());
62 }
63 }
64 }
65 });
66
67 txtInput.addKeyListener(new KeyAdapter() {
68
69 @Override
70 public void keyPressed(KeyEvent e) {
71 setAdjusting(cbInput, true);
72 if (e.getKeyCode() == KeyEvent.VK_SPACE) {
73 if (cbInput.isPopupVisible()) {
74 e.setKeyCode(KeyEvent.VK_ENTER);
75 }
76 }
77 if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) {
78 e.setSource(cbInput);
79 cbInput.dispatchEvent(e);
80 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
81 txtInput.setText(cbInput.getSelectedItem().toString());
82 cbInput.setPopupVisible(false);
83 }
84 }
85 if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
86 cbInput.setPopupVisible(false);
87 }
88 setAdjusting(cbInput, false);
89 }
90 });
91 txtInput.getDocument().addDocumentListener(new DocumentListener() {
92 public void insertUpdate(DocumentEvent e) {
93 updateList();
94 }
95
96 public void removeUpdate(DocumentEvent e) {
97 updateList();
98 }
99
100 public void changedUpdate(DocumentEvent e) {
101 updateList();
102 }
103
104 private void updateList() {
105 setAdjusting(cbInput, true);
106 model.removeAllElements();
107 String input = txtInput.getText();
108 if (!input.isEmpty()) {
109 for (String item : items) {
110 if (item.toLowerCase().startsWith(input.toLowerCase())) {
111 model.addElement(item);
112 }
113 }
114 }
115 cbInput.setPopupVisible(model.getSize() > 0);
116 setAdjusting(cbInput, false);
117 }
118 });
119 txtInput.setLayout(new BorderLayout());
120 txtInput.add(cbInput, BorderLayout.SOUTH);
121 }
122 }

作者:TWaver