FocusTraversalPolicy Problem?!

ElJarno

Mitglied
Hi Leute,
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)
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
 
Zuletzt bearbeitet:
Zurück