private void initListeners() {
		textField.getDocument().addDocumentListener(new DocumentListener() {
			public void insertUpdate(DocumentEvent e) {
				changed();
			}

			public void removeUpdate(DocumentEvent e) {
				changed();
			}

			public void changedUpdate(DocumentEvent e) {
				changed();
			}
			
			public void changed() {
				setAdjusting(true);
				updateList();
				setAdjusting(false);
			}
		});
		
		comboBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent evt) {
				if(!isAdjusting() && comboBox.getSelectedItem() != null) {
					textField.setText(comboBox.getSelectedItem().toString());
				}
			}
		});
		
		textField.addKeyListener(new KeyAdapter() {

			@Override
			public void keyPressed(KeyEvent evt) {
				setAdjusting(true);
				if(evt.getKeyCode() == KeyEvent.VK_SPACE && comboBox.isPopupVisible()) {
					evt.setKeyCode(KeyEvent.VK_ENTER);
				}
				if (evt.getKeyCode() == KeyEvent.VK_ENTER
						|| evt.getKeyCode() == KeyEvent.VK_UP
						|| evt.getKeyCode() == KeyEvent.VK_DOWN) {
					evt.setSource(comboBox);
					comboBox.dispatchEvent(evt);
					if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
						textField.setText(getComboText());
						setPopupVisible(false);
					}
				}
				if(evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
					setPopupVisible(false);
				}
				setAdjusting(false);
			}
		});
	}