Hi Leute,
hab da ein "kleines" Problem mit der FocusTraversalPolicy Klasse. Hab eine selbst abgeleitete JComboBox in meinem Panel:
Und zwar bekomme ich als Component Parameter wenn ich per Tab in die nächste Componente wechsle in der Methode
anstatt die ComboBoxWithSearch den BasicComboBoxEditor geliefert, was kann ich da machen?
Gruß Jan
hab da ein "kleines" Problem mit der FocusTraversalPolicy Klasse. Hab eine selbst abgeleitete JComboBox in meinem Panel:
Java:
/**
*
*/
package com.ed.Tools;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.Vector;
import javax.swing.ComboBoxEditor;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
/**
* Combobox welche die Listelemente anhand der Eingabe filtert
*
* @author dreyer
*
*/
public class ComboBoxWithSearch extends JComboBox {
private static final long serialVersionUID = 1L;
public ComboBoxWithSearch() {
super();
init();
}
public ComboBoxWithSearch(ComboBoxModel arg0) {
super(arg0);
init();
}
public ComboBoxWithSearch(Object[] arg0) {
super(new AutoFilteringComboBoxModel(arg0));
init();
}
public ComboBoxWithSearch(Vector<?> arg0) {
super(new AutoFilteringComboBoxModel(arg0.toArray()));
init();
}
private void init() {
setEditable(true);
final ComboBoxEditor edi = getEditor();
final JTextComponent ediComp = (JTextComponent) edi
.getEditorComponent();
ediComp.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
Object quelle = e.getSource();
if (quelle instanceof JTextComponent) {
((JTextComponent) quelle).setCaretPosition(0);
}
}
@Override
public void focusGained(FocusEvent e) {
Object quelle = e.getSource();
if (quelle instanceof JTextComponent) {
((JTextComponent) quelle).selectAll();
}
}
});
ediComp.getDocument().addDocumentListener(new DocumentListener() {
private synchronized void setSelectedItem() {
SwingUtilities.invokeLater(new Runnable() {
public synchronized void run() {
if ((edi.getItem() instanceof String)
&& ComboBoxWithSearch.this.isVisible())
try {
setPopupVisible(true);
} catch (Exception e) {
// Do nothing
}
final int oldItemCount = getItemCount();
ComboBoxWithSearch.this.setSelectedItem(edi.getItem());
final int newItemCount = getItemCount();
final int maxRowCount = getMaximumRowCount();
if (isPopupVisible()
&& oldItemCount != newItemCount
&& Math.min(oldItemCount, newItemCount) < maxRowCount) {
setMaximumRowCount(1);
setMaximumRowCount(maxRowCount);
}
ediComp.setCaretPosition(ediComp.getText().length());
}
});
}
public void changedUpdate(DocumentEvent e) {
setSelectedItem();
}
public void insertUpdate(DocumentEvent e) {
setSelectedItem();
}
public void removeUpdate(DocumentEvent e) {
setSelectedItem();
}
});
}
}
Und zwar bekomme ich als Component Parameter wenn ich per Tab in die nächste Componente wechsle in der Methode
Java:
public Component getComponentAfter(Container aContainer,
Component aComponent)
Gruß Jan
Zuletzt bearbeitet: