JWindow zeichent Bild nicht

Status
Nicht offen für weitere Antworten.

SegmoDaVinci

Mitglied
Hallo,
das Forum hat mir bis jetzt immer geholfen, ohne dass ich selbst ein Thema erstellen musst :applaus:. Jetzt komm ich aber nicht mehr weiter und hoffe ihr könnt mir helfen.
Folgendes Problem:
Hab hier die zwei (gekürzten) Codes gepostet. Alles was eigentlich geschehen soll ist, sobald der "OK-Button" gedrückt wird geht für ein paar Sekunden ein JWindow mit einem Bild auf. Das JWindow erscheint auch, nur das Bild nicht. Egal wo auch immer ich Bildchen.displayBild(); aufrufe erscheint das JWindow mit dem Bild nur nicht in public void actionPerformed(ActionEvent e). Wär Klasse wenn einer eine Idee hätte, wie ich die Methode actionPerformed() dazu bringe auch das Bild zu zeichen bzw. irgendeine andere Lösung :wink:

Danke euch

Code:
import java.awt.*;
import java.awt.event.*;

public class Fenster extends JFrame implements ActionListener
{
	private int tries = 3;

  public Fenster ()
  {
	JPanel panel1 = new JPanel();
	//Bildchen.displayBild(); 
	
	AbstractButton button1 = new JButton("OK");
	button1.setActionCommand("OK");
	button1.addActionListener(this);
	
	AbstractButton button2 = new JButton("ABBRECHEN");

	button2.setActionCommand("ABBRECHEN");
	button2.addActionListener(this);	
	
	panel1.setLayout(new FlowLayout(FlowLayout.CENTER));
	panel1.add(button1);
	panel1.add(button2);	
	setContentPane(panel1);     

	this.setTitle("Login");	
	this.setSize(256,128);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setVisible(true);
  }
   
	   public void actionPerformed(ActionEvent e)
	   { 
			String cmd = e.getActionCommand(); 
			if (cmd.equals("OK") &&  (tries != 0))
			{ 
				
				if(tries != 2)
					Bildchen.displayBild();
				else 
						System.out.println("Programmstart mit " + tries + " verbleibendne Versuchen");
						// + Weiterführender Code
				tries--;
			}
			
			if (cmd.equals("ABBRECHEN") || (tries == 0)) 
			{ 	
				System.out.println(tries);
				System.exit(0);
			} 
		}	
}
Code:
import javax.swing.*;
import java.awt.*;
public class Bildchen extends JWindow
 {
	private JPanel panel;
	private static ImageIcon icon;	
	
	public Bildchen(String image)
	{
		panel = new JPanel(); 
		panel.setLayout(new BorderLayout());
		icon = new ImageIcon(image);
		panel.add(new JLabel(icon), BorderLayout.CENTER);
		setContentPane(panel); 
	}
 
	public void waitFor(int millis)
	{
		 setSize(icon.getIconWidth(), icon.getIconHeight());
		 setVisible(true);	 
		 try {
			Thread.sleep(millis);
	} 	 catch (InterruptedException e) {
				e.printStackTrace();
	}
		 setVisible(false);
	}
	
	public static void displayBild()
	{
		Bildchen b = new Bildchen("test.jpg");
		b.waitFor(2000);
	}
}
 
Folgendes hab ich verändert:
1. Klasse Bildchen implementiert jetzt ActionListener
2. ein javax.swing.Timer wurde eingesetzt
3. die Methode waitFor(...) wurde angepasst
4. die Methode actionPerformed(...) wurde angelegt um die Anzeige vom Bildchen zu stoppen.
Code:
public class Bildchen extends JWindow implements ActionListener{
    private Timer timer ;
...
    public void waitFor(int millis) {
        setSize(icon.getIconWidth(), icon.getIconHeight());
        setVisible(true);
        timer = new Timer(millis, (ActionListener) this); 
        timer.start(); 
    }
    public void actionPerformed(ActionEvent e) {
        timer.stop();
        setVisible(false);
        dispose();
    }
...
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben