非活动Java文档侦听器
我正在尝试从组合框编辑器获得响应。因此,我在组合框中添加了一个非活动Java文档侦听器,java,swing,jcombobox,documentlistener,Java,Swing,Jcombobox,Documentlistener,我正在尝试从组合框编辑器获得响应。因此,我在组合框中添加了一个文档侦听器。问题是文档侦听器似乎根本不工作。我认为侦听器没有连接到组合框编辑器。我知道我错过了什么。代码如下: // constructor of GUI class ComboBoxDocumentHandler handle = new ComboBoxDocumentHandler(); JTextComponent comboEditorComponent =(JTextComponent) Inst
文档侦听器。问题是文档侦听器似乎根本不工作。我认为侦听器没有连接到组合框编辑器。我知道我错过了什么。代码如下:
// 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
}
}
关于您的编辑器应该是一个basicmboboxeditor
,然后您可以使用其方法并使用方法addActionListener(yourListener)
您的编辑器应该是一个BasicComboxeditor
,然后您可以使用其方法并使用方法addActionListener(yourListener)代码>
- 所有这些事件都不会最终确定,直到所有派生的JPopup with JList可见,并且Action或ItemListener中的所有事件都已完成
- 派生文档的使用使我对自动完成JComboBox(基本上必须包含文档并带有偏差)感到有意义
- 有关所有相关事件和侦听器的示例
编辑
- 所有这些事件都不会最终确定,直到所有派生的JPopup with JList可见,并且Action或ItemListener中的所有事件都已完成
- 派生文档的使用使我对自动完成JComboBox(基本上必须包含文档并带有偏差)感到有意义
- 有关所有相关事件和侦听器的示例
编辑
可能是因为您的代码没有编译,因为它缺少两个实现方法,其中一个是:insertUpdate()
?我将它们删掉以发布代码。。我的问题并不是说我的代码没有编译,这提供了实现所需方法的线索。为了更快地获得更好的帮助,请发布一个。有趣的是,我们应该如何猜测您将其删除(您会惊讶地看到,有多少人在这里发布的问题中使用了未编译的代码,并抱怨它不起作用)。更有趣的是,你选择了那些与你的问题无关的方法。正如Andrew所说,发布一个可能是因为您的代码没有编译,因为它缺少两个实现方法,其中一个是:insertUpdate()
?我将它们删掉以发布代码。。我的问题并不是说我的代码没有编译,这提供了实现所需方法的线索。为了更快地获得更好的帮助,请发布一个。有趣的是,我们应该如何猜测您将其删除(您会惊讶地看到,有多少人在这里发布的问题中使用了未编译的代码,并抱怨它不起作用)。更有趣的是,你选择了那些与你的问题无关的方法。正如安德鲁所说,发布一个
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();
}
});
}
}