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?
Zudem hat sich gerade heraus gestellt, dass falls jemand die API kennt:
JCalendar Java Bean, a Java Date Chooser
beim Focus in den JDateChooser der Focus nicht richtig gesetzt wird bzw. ich das TextFeld nicht bearbeiten kann, jedoch weiter in die nächsten Componenten korrekt beim Tab gesprungen wird
Gruß Jan
hab da ein "kleines" Problem mit der FocusTraversalPolicy Klasse. Hab eine selbst abgeleitete JComboBox in meinem Panel:
Code:
/**
*
*/
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
Code:
public Component getComponentAfter(Container aContainer,
Component aComponent)
Zudem hat sich gerade heraus gestellt, dass falls jemand die API kennt:
JCalendar Java Bean, a Java Date Chooser
beim Focus in den JDateChooser der Focus nicht richtig gesetzt wird bzw. ich das TextFeld nicht bearbeiten kann, jedoch weiter in die nächsten Componenten korrekt beim Tab gesprungen wird
Gruß Jan
Zuletzt bearbeitet: