MouseListener funktioniert nach Timerstart nicht mehr

Der_Falke_

Mitglied
Hallo liebe Community,

ich habe in meinem Programm einen Timer und einen MouseListener eingebaut. Der MouseListener wird beim starten des Programms direkt dem Frame hinzugefügt. Ich habe einfach mal eine Testnachricht eingebaut die immer wenn man klickt den Wert der Variablen i aus der Klasse "Vorgeschichte" ausgibt. Standard gemäß ist i auf 0 gesetzt. Wenn man nun in irgend einem anderen Bild klickt wird auch "0" in der Console ausgegeben. Nachdem der Timer gestartet ist habe ich i dann auf 1 gesetzt, doch der MouseListener reagiert nicht mehr. Wenn ich in den Frame klicke kommt keine Nachricht in der Console. Woran liegt der Fehler?

Danke schon mal im Vorraus.

Main:
[Java]
public static void main(String[] args) throws IOException {
Main frame = new Main("MineJump");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400,800);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
Menus.hauptmenu(frame);

Image icon = new ImageIcon(Main.class.getResource("/Images/icon.png")).getImage();
frame.setIconImage(icon);
frame.setVisible(true);

frame.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}

@Override
public void mouseEntered(MouseEvent e) {}

@Override
public void mouseClicked(MouseEvent e) {
if(Vorgeschichte.i == 0) {
System.out.println("0");
} else {
System.out.println("1");
}
}
});
}
[/Java]

Vorgeschichte:
[Java]
public static void vorgeschichte1(JFrame frame) {
JPanel panelVG = new JPanel();

panelVG.setLayout(null);
panelVG.setBounds(0, 0, 1400, 800);

panelVG.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
Vorgeschichte.mX = e.getX();
Vorgeschichte.mY = e.getY();
}
});

JLabel background1 = new JLabel(new ImageIcon(Main.class.getResource("/Images/backgroundVG1.png")));
background1.setBounds(0, 0, 1400, 800);
JLabel text1 = new JLabel(new ImageIcon(Main.class.getResource("/Images/textVG1.png")));
text1.setBounds(50, position, 1000, 200);
JLabel hinweisKlicken = new JLabel(new ImageIcon(Main.class.getResource("/Images/hinweisKlicken.png")));

t = new Timer(50, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(position > 550) {
text1.setBounds(50, position, 1000, 200);
panelVG.add(text1);
panelVG.add(background1);
frame.add(panelVG);
position = position-1;

i = 1;
} else {
tKlicken = new Timer(1, new ActionListener() {
public void actionPerformed(ActionEvent e) {
text1.setBounds(50, 550, 1000, 200);
panelVG.add(text1);
hinweisKlicken.setBounds(mX+20, mY+20, 200, 80);
panelVG.add(hinweisKlicken);
panelVG.add(background1);
frame.add(panelVG);
}
});
panelVG.add(text1);
panelVG.add(hinweisKlicken);
panelVG.add(background1);
frame.add(panelVG);
tKlicken.setInitialDelay(0);
tKlicken.setRepeats(true);
tKlicken.start();
}
}
});
panelVG.add(text1);
panelVG.add(background1);
frame.add(panelVG);
t.setInitialDelay(0);
t.setRepeats(true);
t.start();
}
[/Java]

MfG
Der_Falke_
 
Schreibe mal in die mouseClicked Methode direkt eine Textausgabe ohne vorher etwas abzufragen. Wenn das dann funktioniert weißt du, dass der Listener funktioniert.

Wo hast du die Variable i definiert? Und warum setzt du dem JPanel einen MouseListener? Du hast dem JFrame schon einen gegeben, da brauchst du nicht noch einen.
 
Zuletzt bearbeitet:
public static int i = 0;
in der Klasse Vorgeschichte ganz oben.

Dem Panel hatte ich den MouseListener schon früher hinzugefügt als ich eine andere Funktion geschrieben habe. Danach habe ich halt einige Tests gemacht wesshalb irgendwann dann der Frame noch einen MouseListener bekommen hat.

Und der MouseListener funktioniert wirklich nicht, auch wenn ich die Abfrage rausnehme.
 
So auf Anhieb sehe ich keinen offensichtlichen Grund, warum ein Timer den MouseListener blocken sollte.
Wenn keine MouseEvent beim JFrame mehr ankommen, werden die Events ev. durch eine Component auf dem JFrame "abgefangen". Ob das der Fall ist oder sein kann, ist aus deinen Codeschnipseln nicht ersichtlich.
Mit ist aufgefallen, daß du in der actionPerfomed von deinem Timer t jedesmal die JLabels text1 und background dem panelVG addest und das panelVG dem JFrame. Warum das?
 
Auf diese Methode bin ich nach langen probieren und immer wieder Sachen an andere Stellen schieben gekommen.
Da der Text immer einen Pixel höher geschoben wird muss ich auch Hintergrund und andere Komponenten neu adden, da der Komponent der als letztes geaddet wird immer im Hintergrund angezeigt wird, dadurch muss ich also die hintersten Ebenen immer wieder neu adden sobald ich die vorderen Ebenen neu setze.
 
Okay...
Ich denke mal das das relativ schwierig, bzw. doof zum umsetzen da man nicht viel weglassen kann. Ich denke mal man braucht den Hintergrund und das Label das sich bewegt... Ich werde mich morgen mal ran setzen, heute habe ich leider keine Zeit mehr ^^" Ich poste morgen mein Ergebnis!
 

Neue Themen


Zurück
Oben