2013-02-04 31 views
0

我想從ComboBox編輯器得到響應。所以我給組合框添加了一個document listener。問題是文檔監聽器似乎根本沒有工作。我認爲聽衆沒有連接到combobox editor。我知道我錯過了一些東西。下面是代碼:Document Listener inactive Java

// 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 
    } 
} 

問候

+0

可能是因爲您的代碼不會因爲它編譯錯過了兩個實現方法,其中之一是:'insertUpdate()'? –

+0

我把它們剪下來發布代碼..我的問題根本沒有說我的代碼沒有編譯,它提供了實現所需方法的線索。 –

+2

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

0

你的編輯器應該是一個BasicComboBoxEditor,然後你可以使用它的方法和使用方法addActionListener(yourListener);

3
  • 所有這些事件都沒有最終確定,直到JList的派生JPopup是可見的,並且來自Action或ItemListener的所有事件都已完成,

  • 派生文檔m的使用阿克我SENCE爲自動完成的JComboBox(基本上必須包含文檔,並與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(); 
      } 
     }); 
    } 
}