Wie kann man etwas von Typ Image wieder löschen?

Es ist so: Ich hab ein Programm, bei dem erst der Startbildschirm ercheint (Typ Image). Wenn ich den entsprechenden Knopf fürs Spiel drück, läuft das Spiel, aber nur im Hintergrund, das Startbild bleibt.
Dieses Startbild soll verschwinden, damit das eigentliche Spiel losgeht.
 
Du zeichnest wohl das Image einfach über die Paint/Component. In dem Fall, musst du nur verhindern, dass das Bild gezeichnet wird. Wie hängt von deinen Projekt ab. Im einfachsten imperativen Fall setzt du eine boolean um, auf die vor dem Zeichnen geprüft wird.
 
So, hier erstmal das bisschen Code:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import java.awt.*;
import java.io.File;
import javax.swing.*;
 
/**
 * Class ZEICHENFENSTER - Eine Klasse, die einfache grafische Zeichnungen 
 * in einem Programmfenster ermöglicht.
 * 

 *
 * @version 2007.05.07
 */
 
public class ZEICHENFENSTER
{
    public JFrame frame;
    private CanvasPane canvas;
    private JPanel steuerungOst,steuerungSued;
    private Graphics2D graphic;
    private Color backgroundColor;
    public  Image canvasImage;
    
    
    private static ZEICHENFENSTER singleton;
 
    /**
     * Erzeugt eine Zeichenfenster mit Standardmaßen 600*500 und Hintergrundfarbe weiß 
     * @param titel  Titel des Fensters     
     */
    public ZEICHENFENSTER(String titel)
    {
        this(titel, 500, 250, Color.white);        
        frame = new JFrame();
       
    }
 
    /**
     * Erzeugt ein Zeichenfenster mit weißem Hintergrund.
     * @param titel  Fensterueberschirft
     * @param breite  Breite des Fensters
     * @param hoehe  Hoehe des Fensters
     */
    public ZEICHENFENSTER(String titel, int breite, int hoehe)
    {
        this(titel, breite, hoehe, Color.white);
        frame = new JFrame();
    }
 
    /**
     * Erzeugt ein Zeichenfenster.
     * @param titel  Fensterueberschirft
     * @param breite  Breite des Fensters
     * @param hoehe  Hoehe des Fensters
     * @param hintergrundFarbe  Hintergrundfarbe des Zeichenfensters
     */
    private ZEICHENFENSTER(String titel, int breite, int hoehe, Color hintergrundFarbe)
    {
        frame = new JFrame();
        canvas = new CanvasPane();
        canvas.setPreferredSize(new Dimension(breite, hoehe));
        frame.getContentPane().add(canvas,BorderLayout.CENTER);
        JPanel p1=new JPanel();
        p1.setLayout(new BorderLayout());
        steuerungOst = new JPanel();
        steuerungSued = new JPanel();
        //frame.addMouseListener(new Senet());
        steuerungOst.setLayout(new BoxLayout(steuerungOst,BoxLayout.Y_AXIS));
        steuerungSued.setLayout(new BoxLayout(steuerungSued,BoxLayout.X_AXIS));
        p1.add(steuerungOst,BorderLayout.NORTH);
        frame.getContentPane().add(p1,BorderLayout.EAST);
        frame.getContentPane().add(steuerungSued,BorderLayout.SOUTH);
        frame.setTitle(titel);
        backgroundColor = hintergrundFarbe;
        frame.pack();
        zeige();
    }
 
    public static ZEICHENFENSTER gibFenster()
    {
        if (singleton==null){singleton=new ZEICHENFENSTER("PAC-MAN - By Sebastian Goehring", 500, 600, Color.black);}//  836, 704, 
        singleton.zeige();

        return singleton;
        

    }
 
    /**
     * Macht das Zeichenfenster sichtbar bzw. setzt es in den Vordergrund,
     * falls es bereits sichtbar ist.
     */
    public void zeige()
    {
        if(graphic == null) {
            // nur beim ersten Aufruf wird der Hintergrund mit der Hintergrundfarbe 
            // gefuellt
            Dimension size = canvas.getSize();
            canvasImage = canvas.createImage(size.width, size.height);
            graphic = (Graphics2D)canvasImage.getGraphics();
            graphic.setColor(backgroundColor);
            graphic.fillRect(0, 0, size.width, size.height);
            graphic.setColor(Color.black);
        }
        frame.setVisible(true);
    }
 


 (...unwichtiger Part..)

  
class ViewComponent extends JComponent {
    

    public ViewComponent() {
    }

    public ViewComponent(File f) {
	this.setImage(f);
    }

    public void setImage(File file) {
	ZEICHENFENSTER.gibFenster().canvasImage = Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath())
;
	
	if (ZEICHENFENSTER.gibFenster().canvasImage != null)
	    repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
	if (ZEICHENFENSTER.gibFenster().canvasImage != null)
	    g.drawImage(ZEICHENFENSTER.gibFenster().canvasImage, 0, 0, this);
    }
}
/*
 * In dieser Klasse können erstellte Bilder hochgeladen werden.
 */
 class ImageViewer  {

    private ViewComponent viewComponent = null;
    private File imageFile = null;

    public ImageViewer(String Bild) {

	imageFile = new File(Bild);
	viewComponent = new ViewComponent(imageFile);
	ZEICHENFENSTER.gibFenster().frame.add(viewComponent);

	ZEICHENFENSTER.gibFenster().frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
    }

    public static void main(String[] args) {
	ZEICHENFENSTER.gibFenster().frame.setVisible(true);
    }
    
    
}
Damit wird das Bild gezeigt:

Java:
ImageViewer image = new ImageViewer("Pacman.png");
 
Du musst den ViewComponent natürlich per remove wieder entfernen. Findest du es sinnvoll, dich rein garnicht an die Conventions zu halten und deutsch und englisch nach Belieben zu vermischen?
 
Könntest ja im Frame einfach das Panel tauschen.
Ca so:
Java:
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageFoo {

	private JFrame frame;
	private JPanel panel1;
	private JPanel panel2;

	public void init() {
		this.panel1 = new FooPanel();
		this.panel2 = new FooPanel2();

		this.frame = new JFrame();
		this.frame.setSize(300, 300);

		this.frame.getContentPane().add(panel1);
		this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.frame.setVisible(true);
	}

	public void start() {
		while (true) {
			this.frame.getContentPane().remove(panel1);
			this.frame.getContentPane().add(panel2);
			// swap panels
			JPanel temp = this.panel1;
			panel1 = panel2;
			panel2 = temp;

			this.frame.validate();
			this.frame.repaint();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String... _) {
		ImageFoo foo = new ImageFoo();
		foo.init();
		foo.start();
	}

	static class FooPanel extends JPanel {

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawOval(10, 10, 10, 10);
		}
	}

	static class FooPanel2 extends JPanel {

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawRect(10, 10, 10, 10);
		}
	}
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben