Я использую SwingX AutoCompleteDecorator
для JComboBox
. Функция автозаполнения работает прекрасно...
Но мне трудно определить момент окончательного выбора пользователя; сохранять мои данные редко.
Позвольте мне попытаться объяснить: поле со списком запускает «comboBoxChanged»-ActionEvent
для каждого выбора. Я должен игнорировать эти события, пока пользователь вводит символы, а поле со списком автоматически сопоставляет и выбирает элементы. Если пользователь нажимает клавишу возврата, генерируется "comboBoxEdited"-ActionEvent
, и я могу сохранить выбранное значение. Здорово ;-)
Если мышь используется для открытия JComboBox
-PopUp и выбора элемента, единственным генерируемым событием является "comboBoxChanged"-ActionEvent
(например, при автоматическом сопоставлении или выборе элемента с помощью клавиш курсора). Событие щелчка мышью каким-то образом потребляется !? Вот почему я не могу определить последний выбор мыши.
Как я могу понять это? Мои неудачные попытки прослушать событие mouseClicked-Event задокументированы в этом SSCCE:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
public class SearchForThePopUpMouseClick extends JPanel
{
private JComboBox<String> comboBox;
public SearchForThePopUpMouseClick()
{
comboBox = new JComboBox<String>(new String[] { "Anna", "Marc", "Maria", "Marten", "Peter" });
add(comboBox);
add(new JTextField("textfield to click"));
AutoCompleteDecorator.decorate(comboBox);
comboBox.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Action Event with '" + e.getActionCommand() + " " + e.getID() + "'");
};
});
((Component) comboBox.getUI().getAccessibleChild(comboBox, 0)).addMouseListener(new MouseListener()
{
@Override
public void mouseReleased(MouseEvent e)
{
System.out.println(e);
}
@Override
public void mousePressed(MouseEvent e)
{
System.out.println(e);
}
@Override
public void mouseExited(MouseEvent e)
{
System.out.println(e);
}
@Override
public void mouseEntered(MouseEvent e)
{
System.out.println(e);
}
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println(e);
}
});
}
public static void main(String[] args) throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
SearchForThePopUpMouseClick autoCompletePanel = new SearchForThePopUpMouseClick();
JFrame frame = new JFrame("SwingX Autocomplete Example");
frame.add(autoCompletePanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
addItemListener(ItemListener)
? - person Muel   schedule 30.10.2012PropertyChangeListener
илиVetoableChangeListener
, но я колю в темноте! Возможно, загрузите исходный код SwingX и посмотрите, что они делают... :P - person Muel   schedule 30.10.2012