0

ComboBox エディターからの応答を取得しようとしています。そこでdocument listener、コンボボックスに a を追加しました。問題は、ドキュメント リスナーがまったく機能していないように見えることです。リスナーが に接続されていないと思いますcombobox editor。私は何かが欠けていることを知っています。コードは次のとおりです。

    // constructor of GUI class
    ComboBoxDocumentHandler handle = new ComboBoxDocumentHandler();

    JTextComponent comboEditorComponent =(JTextComponent) InstantSearchBox.getEditor().getEditorComponent();

    doc = comboEditorComponent.getDocument();

    doc.addDocumentListener(handle);

   // Document Handler class and its method
private class ComboBoxDocumentHandler implements DocumentListener
{

    @Override
    public void changedUpdate(DocumentEvent event) {
    System.out.println("Inside"); // this statement is not printing when I add something to the combobox editor
    }
}

よろしく

4

2 に答える 2

3
  • これらのすべてのイベントは、JList を持つ派生 JPopup が表示されるまで確定されず、Action または ItemListener からのすべてのイベントが完了します。

  • 派生 Document の使用は、AutoComplete JComboBox の意味を成します (基本的に Document と Bias を含む必要があります)

  • 関連するすべてのイベントとリスナーの例

編集

import java.awt.Component;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;

public class ComboBoxHoverOver {

    private JComboBox combo = new JComboBox();

    public ComboBoxHoverOver() {
        combo.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXX");
        combo.setRenderer(new ComboToolTipRenderer(combo));
        combo.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                System.out.println("itemStateChanged");
            }
        });
        combo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("actionPerformed");
            }
        });
        combo.addItem("");
        combo.addItem("Long text 4");
        combo.addItem("Long text 3");
        combo.addItem("Long text 2");
        combo.addItem("Long text 1");
        combo.setEditable(true);
        JTextComponent tc = (JTextComponent) combo.getEditor().getEditorComponent();
        tc.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent e) {
                updateLog(e, "inserted into");
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                updateLog(e, "inserted into");
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                updateLog(e, "inserted into");
            }

            public void updateLog(DocumentEvent e, String action) {
                Document doc = e.getDocument();
                int changeLength = e.getLength();
                System.out.println((changeLength + " character"
                        + ((changeLength == 1) ? " " : "s ")
                        + action + " " + doc.getProperty("name") + "."
                        + "  Text length = " + doc.getLength()));
            }
        });
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(combo);
        f.pack();
        f.setVisible(true);
    }

    private class ComboToolTipRenderer extends BasicComboBoxRenderer {

        private static final long serialVersionUID = 1L;
        private JComboBox combo;
        private JList comboList;

        ComboToolTipRenderer(JComboBox combo) {
            this.combo = combo;
        }

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            System.out.println(value + ", " + index + ", " + isSelected + ", " + cellHasFocus);
            if (comboList == null) {
                comboList = list;
                KeyAdapter listener = new KeyAdapter() {

                    @Override
                    public void keyReleased(KeyEvent e) {
                        System.out.println("keyReleased " + e.getKeyCode());
                        if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_UP) {
                            int x = 5;
                            int y = comboList.indexToLocation(comboList.getSelectedIndex()).y;
                            System.out.println("keyReleased " + comboList.getSelectedIndex());
                        }
                    }
                };
                combo.addKeyListener(listener);
                combo.getEditor().getEditorComponent().addKeyListener(listener);
                comboList.addListSelectionListener(new ListSelectionListener() {

                    public void valueChanged(ListSelectionEvent e) {
                        if (e.getValueIsAdjusting()) {
                            JList list = (JList) e.getSource();
                            int item = list.getSelectedIndex();
                            if (item > -1) {
                                String string = list.getSelectedValue().toString();
                                System.out.println("valueChanged " + list.getSelectedValue().toString());
                            }
                        }
                    }
                });
            }
            if (isSelected) {
                System.out.println("isSelected " + value.toString());
            }
            return this;
        }
    }

    public static void main(String[] args) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ComboBoxHoverOver comboBoxHoverOver = new ComboBoxHoverOver();
            }
        });
    }
}
于 2013-02-04T17:39:27.970 に答える
0

エディターは である必要がありBasicComboBoxEditor、そのメソッドを使用してメソッドを使用できますaddActionListener(yourListener);

于 2013-02-04T17:24:49.260 に答える