ComponentListener feuer wo er nicht Feuern sollte (JavaBug?)

Kerwin

Erfahrenes Mitglied
Hallo liebe Gemeinde,

irgendwie habe ich eine komische Situation. Ich habe ein JFrame, auf dem ich einen ComponentListener lege, der reagieren soll, wenn das JFrame sich bewegt, Größe sich ändert usw.
Auf dem Panel des JFrames lege ich eine JComboBox und füge ein paar kleine Items hinzu.

Nun das koriose. Wenn ich die JComboBox auswähle, dann wird der ComponentListener vom JFrame gefeuert, und zwar das Event, dass sich mein JFrame bewegt haben soll (moved). Lasse ich mir die Source ausgeben, von der das Event kommt, so steht auch da, dass das JFrame dieses Event ausgelöst haben soll und nicht meine JComboBox.

Wie kann das sein? Mir ist das bisher noch nie aufgefallen, erst jetzt wo ich von Windows zu Linux gewechselt habe. Leider habe ich auch kein Windows mehr auf meinem Rechner um das gegen zu prüfen. Kann es sein, dass dieser Fehler nur unter Linux auftritt? Wie kann ich das umgehen/verhindern?
Angemerkt sei an dieser Stelle, dass ich die Javaversion 1.6.0_7 benutze, die bei OpenSuse 11 installiert wird.

Code:
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;


public class TestFrame extends JFrame implements ComponentListener{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new TestFrame().start();
	}
	
	private void start(){
		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.addComponentListener(this);
		
		JComboBox cbox = new JComboBox();
		cbox.addItem("eins");
		cbox.addItem("zwei");
		cbox.addItem("zwei");
		
		this.getContentPane().add(cbox);
		
		
		this.setVisible(true);
	}

	@Override
	public void componentHidden(ComponentEvent arg0) {
		System.out.println("hidden");
	}

	@Override
	public void componentMoved(ComponentEvent arg0) {
		System.out.println("moved");
	}

	@Override
	public void componentResized(ComponentEvent arg0) {
		System.out.println("resized");
	}

	@Override
	public void componentShown(ComponentEvent arg0) {
		System.out.println("shown");	
	}
}
 
Zurück