Funktion Copy Area

Status
Nicht offen für weitere Antworten.

Jackie

Mitglied
Wenn ich jetzt ein fillOval habe:
Code:
Stift.fillOval(10, 60, 50, 50);
Wie schaffe ich es das einfach um 2 pixel nach rechts zu kopieren sodass es sozusagen wandert? mit der funktion copyarea verschwindet der kreis immer bei mir?
 
Poste doch mal deinen Code..

normalerweise übergibt man eine Membervariable als Parameter die immer wieder vor dem Aufruf von repaint() geändert werden kann.
Aber wahrscheinlich liegt hier grade ein grundlegendes Missverständniss vor.

€dit:
Man sollte den 1. Buchstaben bei Variablen und Methodennamen klein schreiben, bei Klassennamen groß.
Deshalb: "stift" statt "Stift"
(außer Stift wäre bei dir ne eigene Klasse mit statischen Methoden^^, was ziemlich sinnlos wäre)
 
Zuletzt bearbeitet:
Code:
  public void zeichnen() {
 Stift = getGraphics();
Dimension Groesse = getSize();
int hoehe = Groesse.height;
int breite = Groesse.width;
Stift.setColor(Color.red);
Stift.fillOval(10, 60, 50, 50);
        }
        
        public void verschieben() {
        
       Stift.copyArea(10, 60, 48, 52, 52, 0);
        }
        
        public void weg() {
        repaint();	
        }
 
niemals getGraphics() aufrufen,

nur das Graphics-Objekt, welches bei paint() oder paintComponent() übergeben wird ist gut,
und auch das nicht in einem Klassenattribut speichern, sondern nur zum aktuellen Malen verwenden
 
Ich poste einfach mal einen Beispielcode:
Java:
public class XXX{

	public static void main(String[] args){
		new XXX();}


	private JFrame window = new JFrame();
	private int cnt = 50;

	public XXX(){
		window.setBounds(100,100,290,150);

		window.add(panel);

		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				window.setVisible(true);
			}
		});

		Thread myThread = new Thread(new Runnable(){
			public void run(){
				while(true){
					try{Thread.sleep(20);}catch(Exception e){e.printStackTrace();}
					++cnt;
					if(cnt > 200){
						cnt = 50;
					}
					panel.repaint();
				}
			}
		});
		myThread.start();
	}


	JPanel panel = new JPanel(){
		public void paintComponent(Graphics g){
			super.paintComponent(g);
			g.drawRect(cnt,50,30,20);
		}
	};

}
 
als aller erstes musst du dich zwischen AWT und Swing entscheiden,
dann wäre es mal interessant, was das überhaupt für eine Klasse ist, von der wir hier reden, Frame, Canvas, JPanel, ..?

schau dir bitte Beispielprogramme aus Tutorials an, etwa
Trail: 2D Graphics (The Java™ Tutorials)

da siehst du dann, wie man an das Graphics-Objekt kommt,
ob das von paint aus an noch andere Methoden weitergereicht wird, kann man danach modellieren
 
dieses programm funktioniert bei mir nicht..kann man nicht irgendwie (so simpel wie möglich) den kreis verschwinden lassen und ihn z.B 50 px weiter rechts neu zeichnen?:rtfm:
 
Les dir ein Tutorial durch (wie SlaterB bereits geschrieben hat) und/oder poste deinen kompletten Code hier. Das zeichnen in Java funktioniert nicht so wie du dir es vorstellst.
 
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class grafik extends JFrame 
{
private int radius = 25;
private int xkoor = 20;
private int ykoor = 40;
   public grafik()
   { 
  super("JAVA RULES!!!");
    JPanel Platte = new JPanel();

   setContentPane(Platte);
        }
        
        

        public void paint(Graphics g) {
g.setColor(Color.green);
g.fillOval(xkoor, ykoor, radius*2, radius*2);
  while(true){
g.drawOval(xkoor,ykoor,radius*2,radius*2);
repaint();
xkoor++;
   try { Thread.sleep(20) ; } catch (Exception e) { };
  }
        }
        
     
    
                
        public static void main (String[] args) {
          grafik Rahmen = new grafik();	
             
    Rahmen.setSize(600, 500);
    Rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Rahmen.setVisible(true);
        }
}
 
Java:
class A{static{int i=0;while(i!=1){System.out.println((char)7);}}}
 
Zuletzt bearbeitet:
Tschuldigung, hab mich im Thread vertan.

€dit:
Wegen deinem Code:
Guck dir nochmal den Code an den ich oben gepostet habe. Der Unterschied ist: Du rufst Thread.sleep innerhalb der paint-Methode auf. Das darf man unter keinen Umständen machen! paint muss immer innerhalb von ein paar millisekunden abgearbeitet werden können. In paint darf nichts außer das wirkliche malen der GUI stehen.
 
Zuletzt bearbeitet:
ok...thx wo ich grade hier bin:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class WorkOne extends Thread {
   String name;
   int zahlen;

   public WorkOne(int z) {
      zahlen = z;
   }


   public void run() {
  long summe = 0;

      for (int i=0; i < zahlen; i++) {
      	
     	String theString = "" + summe;
      	System.out.println("" + theString);
summe = summe + 1;
try
{
Thread.sleep(100);	
}
catch(InterruptedException x) {
//...
}
      }
      
   }
   
  
    public static void main(String[] args) {
    WorkOne work1 = new WorkOne(400);

    work1.start();

  }
}

Ich hab herumprobiert ...wie könnte ich alles in einem asgeben lassen.. so wie ein countup der bis zu 400 geht. und dass alles in einer zahl ausgegebeen wird..
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben