Problem: Button muss zwei Mal angeklickt werden, bis Aktion ausgeführt wird

HexaDeff

Mitglied
Hi,

also ich habe ein kleines Problem mit meinem unten aufgeführten Code. Und zwar soll ein Bild ausgegeben werden, wenn ein Button angeklickt wird. Bei mir muss der Button allerdings zwei Mal angeklickt werden, bis das Bild angezeigt wird. Ich kann mir aber nicht erklären warum. Zum Test habe ich es mit zwei Buttons und zwei Bildern gemacht, bei beiden ist es aber dasselbe: Anzeige erst nach zweitem Klick.

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;




public class gui extends JFrame {
	
	private JButton button1 = new JButton("Click1");
	private JButton button2 = new JButton("Click2");
	private JLabel label1 = new JLabel();
	private JLabel label2 = new JLabel();
	
	public gui(){
				
		setLayout(new FlowLayout());
		setTitle("Test");
		setSize(800,600);
		setResizable(false);
		add(button1);
		button1.addActionListener(new buttonhandler());
		add(button2);
		button2.addActionListener(new buttonhandler());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);

	}
	
	private class buttonhandler implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			
			if(e.getSource() == button1){
			label1.setBounds(479, 223, 100, 160);
			label1.setIcon(new ImageIcon("Bild1"));
			add(label1);
			} else {
				
			}

			if(e.getSource() == button2){
			label2.setIcon(new ImageIcon("Bild2"));
			label2.setBounds(452, 249, 100, 160);
			add(label2);
			} else {
				
			}
		}
	}
}

Die Hauptdatei sieht folgendermaßen aus:

Java:
public class haupt {
	public static void main(String[] args){
		new gui();
	}
}
 
Mich wundert ja setBounds bei FlowLayout. Ich habs nie ausprobiert, aber ich kann mir schlecht vorstellen, wie das funktionieren soll 😉
 
Generell ist es besser, wenn du im Konstruktor gleich die Labels addest (ein leeres Label ohne Text und Bild sieht man eh nicht) und dann im Listener einfach setIcon auf dein Label machst.
 

Zurück
Oben