Graphics verschwinden

Status
Nicht offen für weitere Antworten.
C

casio

Gast
Hi, Leute!!!

Wenn ich mit dem Grafikutensiel "Graphics" z.b. ein Rechteck zeichnen lasse und ein anderes Programm in den Vordergrund ziehe, dann verschwindet des Rechteck.

Nun die Frage:
- Warum!!!
- Wie kann man das unterbinden?

Mfg Casio
 

thE_29

Top Contributor
Wo zeichnest du?

Es wird deswegen verschwinden, weil beim verschieben, mini/maximieren wird dein Programm neu gezeichnet!

Neu zeichnen ist in AWT die Methode paint(Graphics g)

und für Swing sollte man paintComponent(Graphics g) nehmen!
 
C

casio

Gast
hmmm,

das ist nicht mein proglem (verschieben), sondern:

wenn ich ein anderes programm laufen lasse und das Java-programm hinter das andere programm "verstecke" und es dann wieder hervorhole, dann ist das gezeichnete weg.

vielleicht hast du auch das richtige gemeint, oder man kann es auch bei meinem progelm anwenden, aber dann hab ichs nicht gecheckt^^

Mfg casio
 

Larouso

Mitglied
nee, er hat schon genau dein Problem beschrieben... auch wenn du ein anderes Prog drüber legst wird dein Fenster im Hintergrund nicht weitergezeichnet/gehalten... du musst es nochmals neu zeichnen lassen wenn es den Focus bekommt bzw. wieder in den Vordergrund kommt...
ein
Du solltest nen Windowlistener einbauen/ an deinem Frame registrieren, der dann bei nem getFocusEvent "deinFrame.repaint();" aufruft, sollte eigentlich schon reichen... das müsste dann die paint Methode mit passendem Graphicsobjekt automatisch aufrufen.
 
C

casio

Gast
hi also ich habe jetzt einen WindowListener implementiert und die fehlenden methoden erstellen lassen:

Code:
	public void windowOpened(WindowEvent arg0) {}
	public void windowClosing(WindowEvent arg0) {}
	public void windowClosed(WindowEvent arg0) {}
	public void windowIconified(WindowEvent arg0) {}
	public void windowDeiconified(WindowEvent arg0) {}
	public void windowActivated(WindowEvent arg0) {}
	public void windowDeactivated(WindowEvent arg0) {}

dann habe ich diese methoden bekommen. welche muss ich nun nutzen?
 

Illuvatar

Top Contributor
Den WindowListener musst du nicht implementieren, das ist automatisch schon gemacht.

Lies doch einfach mal hier

Schon das zweite mal heute, dass ich den Link poste...
 

Larouso

Mitglied
Illuvatar hat gesagt.:
Den WindowListener musst du nicht implementieren, das ist automatisch schon gemacht.

Lies doch einfach mal hier

Schon das zweite mal heute, dass ich den Link poste...

jap normal sollte es das automatisch machen... aber er sagt ja dass es genau dies nicht bei ihm tut...
Darum dacht ich... WindowListener...
 

alias_host

Aktives Mitglied
Hi,

habe mich nun endlich dazu durchgerungen, mich zu registrieren (casio)

ist habe soweit programmiert:

Code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Dame extends Frame {

	Canvas cv=new Canvas();
	Panel pan1=new Panel();
	Panel pan=new Panel();
	Graphics g;
	Label lb=new Label();
	int[][] figur=new int[8][8];
	int[][] feldfarbe=new int[8][8];
	int[] auswahl=new int[2];
	int spieler=-1;
	Button start=new Button("Neues Spiel");
	boolean win=false;
	
	public Dame (){
		//Aufbau
		setBackground(new Color(220,220,220));
	    setLayout(null);
	    start.setBounds(100,530,90,30);
		cv.setBounds(10,10,400,400);
		pan1.setBounds(10,10,420,420);
		pan.setLayout(null);
		pan1.setLayout(null);
		pan.setBounds(50,50,442,470);
		cv.setBackground(Color.lightGray);
		pan1.setBackground(new Color(90,90,90));
		pan.setBackground(new Color(170,170,170));
		add(start);
		add(pan);
		pan.add(pan1);
		pan1.add(cv);
		lb.setText("Weiß ist am Zug!!!");
		lb.setBounds(50,435,150,30);
		lb.setForeground(Color.red);
		pan.add(lb);
		
		cv.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e0){
				int x=(e0.getX()-10)/50;
				int y=(e0.getY()-10)/50;
		    	if(figur[x][y]==spieler&&win==false){
					auswahl[0]=-1;
					auswahl[1]=-1;
		    		auswahl[0]=x;
		    		auswahl[1]=y;
    				zeichBrett();
		    		auswahlfeldMarkieren();
		    	}
		    	if(auswahl[0]!=-1&&auswahl[1]!=-1&&win==false&&figur[x][y]==0){
        			if((x)+1==auswahl[0]&&(y)-(1*spieler)==auswahl[1]){
        				figur[x][y]=spieler;
        				figur[auswahl[0]][auswahl[1]]=0;
        				zeichBrett();
        				spielerwechsen();
        			}
        			else if((x)-1==auswahl[0]&&(y)-(1*spieler)==auswahl[1]){
        				figur[x][y]=spieler;
        				figur[auswahl[0]][auswahl[1]]=0;
        				zeichBrett();
        				spielerwechsen();
        				}
        			if((x)+2==auswahl[0]&&(y)-(2*spieler)==auswahl[1]){
        				if(figur[(x)+1][(y)-(1*spieler)]==-1*spieler){
	        				figur[x][y]=spieler;
	        				figur[auswahl[0]][auswahl[1]]=0;
	        				gegLösch(auswahl[0]-1);
	        				zeichBrett();
	        				spielerwechsen();
        				}
        			}
        			else if((x)-2==auswahl[0]&&(y)-(2*spieler)==auswahl[1]){
        				if(figur[(x)-1][(y)-(1*spieler)]==-1*spieler){
	        				figur[x][y]=spieler;
	        				figur[auswahl[0]][auswahl[1]]=0;
	        				gegLösch(auswahl[0]+1);
	        				zeichBrett();
	        				spielerwechsen();
         				}
        			}
		    	}
				actionanzeige();
			}
		});
		
		//Action bei drücken von Start
		start.addActionListener(new ActionListener(){
			public void actionPerformed (ActionEvent e){
				spieler=-1;			//Spieler weiß beginnt
				actionanzeige();	// "Spieler weiß beginnt" wird angezeigt
				win=false;
				aufstellBegin();	//Aufstellung erstellen
				zeichBrett();		//Aufstellung zeichnen
			}
	});	
		addWindowListener (new WindowAdapter(){
			public void windowClosing(WindowEvent e){
					System.exit(0);
				}
		});
	}
	public void gegLösch(int x){//Überspringender Stein wird gelöscht
		int y;
		if(spieler==1){
			y=1+auswahl[1];
		}
		else{
			y=auswahl[1]-1;
		}
		figur[x][y]=0;
	}
	public void auswahlfeldMarkieren() {//Das ausgewählte Feld für den Zug wird markiert
		g=cv.getGraphics();
		g.setColor(Color.red);
		g.fillRect(auswahl[0]*50+40,auswahl[1]*50+5,5,5);
	}
	public String abfragewin() {//Abfrage ob Spielende
		String sieger;
		for(int i=0;i<7;i++){
			if(figur[i][7]==1){
				sieger="schwarz";
				return sieger;
			}
			else if(figur[i][0]==-1){
				sieger="weiß";
				return sieger;
			}
		}
		sieger="weiter";
		return sieger;
	}
	public void zeichBrett(){//Brett wird neu gezeichnet
		g=cv.getGraphics();
		for(int s=0;s<=7;s++){
			for(int z=0;z<=7;z++){
				if(s%2==0){
					if(z%2!=0){
						feldfarbe[s][z]=1;//1=Schwarz
						g.setColor(Color.gray);
						g.fillRect(s*50,z*50,50,50);
					}
				}
				else{
					if(z%2==0){
						feldfarbe[s][z]=1;//1=Schwarz
						g.setColor(Color.gray);
						g.fillRect(s*50,z*50,50,50);
					}
				}	
			}
		}
		for(int s=0;s<8;s++){
			for(int z=0;z<8;z++){
				switch(figur[s][z]){
				case 0:
					break;
				case 1:g.setColor(Color.DARK_GRAY);
				g.fillOval(6+s*50,6+z*50,40,40);
					break;
				case -1:g.setColor(Color.white);
				g.fillOval(6+s*50,6+z*50,40,40);
					break;
				}
			}
		}
	}
	public void aufstellBegin(){//Anfangsaufstellung wird erstellt
		for(int s=0;s<8;s++){
			for(int z=0;z<8;z++){
				figur[z][s]=0;
				switch(s){
				case 0:case 2:case 6:
					if(z%2==1){
						if(s==0||s==1||s==2){
							figur[z][s]=1;//Dark_gray
						}		
						if(s==5||s==6||s==7){
							figur[z][s]=-1;//white
						}
				}
					break;
				case 1:case 5:case 7:
					if(z%2==0){
						if(s==0||s==1||s==2){
							figur[z][s]=1;//Dark_gray
						}		
						if(s==5||s==6||s==7){
							figur[z][s]=-1;//white
						}
					}
				}
			}
		}
	}
	public static void main(String[] args) {
		Dame brett= new Dame();
		brett.setSize(542,600);
		brett.setVisible(true);
		try{Thread.sleep(50);}
		catch(Exception e){}
		brett.aufstellBegin();
		brett.zeichBrett();
	}
	private void spielerwechsen() {
		switch(spieler){
		case -1:
			spieler=1;
			break;
		case 1:
			spieler=-1;
			break;
		}
	}
	public void actionanzeige(){//Spielerinfo wird angezeigt
		if(abfragewin()!="weiter"){
			win=true;
			if(abfragewin()=="weiß"){
				lb.setText("Weiß hat gewonnen");
			}
			else{
				lb.setText("Schwarz hat gewonnen");
			}
		}
		else{
			if(spieler==-1){
				lb.setText("Weiß ist am Zug!!!");
			}
			else{
				lb.setText("Schwarz ist am Zug!!!");
			}
		}
	}
}

ich hebe versucht die methode zeichBrett in paint umzuwandeln und Graphics g zu übergeben. nun wird die grafik gezeichnet und gleich wieder "gelöscht". zuvor habe ich die grafik g noch den canvas zugeordnet. weiter bin ich nicht gekommen "in einer Datenstruktur (Array, ArrayList, Vector usw) zu speichern."...

kann mir vllt jemand helfen?

PS: programmiere mit eclipse
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben