0

私はBing/Googleinstant searchのような機能をで書いてcombo boxいるので、このコンボボックスは、ユーザーが入力した内容に基づいてユーザーに提案を提供します。プログラムは魅力のように機能しますが、それらは私が解決する方法を理解できない1つのバグです。問題は、最初に入力された文字が2番目に入力された文字として認識されることです。これは、他の文字の位置にも当てはまります。

コードは次のとおりです。

public MyClass extends JFrame
{
 private  Document doc;
public MyCode()
{
  comboxBox= new JComboBox();
  Handler handle = new Handler();
  JTextComponent comp = (JTextComponent) comboBox.getEditor().getEditorComponent();
  doc = comp.getDocument().addDocumentListener(handle);
  comboBox.addKeyListener(handle);
}

private class Handler implements DocumentListener,KeyListener
{
    String dataTobeSearched= "";
    @Override
    public void changedUpdate(DocumentEvent event) {
        try
        {
            dataTobeSearched = doc.getText(0, doc.getLength());
            System.out.println("Data to be searched "+dataTobeSearched);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
 }

    @Override
    public void keyPressed(KeyEvent event) {

            changedUpdate(null);
    }
}

私は何が間違っているのですか?

DocumentListenerコンボボックスに何かが入力されているときにが呼び出されなかったため、keyListenerをコンボボックスエディターに追加しましたか?これに代わる簡単な方法が他にある場合は、それを共有してください。

上記の問題をどのように解決できますか?

4

2 に答える 2

3

通話を内部changedUpdate()にラップしますSwingUtilities.invokeLater()

于 2013-02-05T11:55:33.640 に答える
1

Oracle WebサイトのJavaチュートリアルによると、changedUpdate()メソッドはプレーンテキストドキュメントでは機能しません。この場合は、insertUpdate()および/またはを使用してくださいremoveUpdate()

メソッド内で使用することの推奨SwingUtilitiesは引き続き有効です。

于 2014-10-20T16:35:39.480 に答える