2D-Grafik Malen/übermalen mit Canvas

B

Blocko

Gast
Hallo.
Ich muss für ein Software Projekt in der Schule ein Programm schreiben, welches mehrere mathematische Probleme löst. Ich habe auch soweit eigentlich alles fertig. Mein letztes Problem ist jetzt, das ich eine Oberfläche habe mit 3 Textfeldern in welche ich 3 Seitenlängen eines Dreiecks eingebe. Das malen habe ich wiefolg gelöst:

[Java] public void paint( int a, int b, int c, int d, int e, int f)
{


x1=a;
y1=b;
x2=c;
y2=d;
x3=e;
y3=f;

anzeige = new Canvas () {

public void paint (Graphics g)
{

g.clearRect(0, 0, 600, 575);
g.drawLine(x1,y1,x2,y2);
g.drawLine(x2,y2,x3,y3);
g.drawLine(x1,y1,x3,y3);
//
// Polygon umriss = null;
// g. clearRect (0, 0, 600, 575);
// g. setColor (Color. black);
// umriss = new Polygon (new int [] {x1, x2, x3},
// new int [] {y1, y2, y3}, 3);
// g. fillPolygon (umriss);

}

};
p.add(anzeige);

anzeige. setVisible (true);
anzeige. setSize (600, 575);
anzeige. setLocation (0, 0);

}
[/Java]
Da ich nicht den ganzen Quellcode hier reinstellen will, da das sicher zu viel und umständlich für euch wäre das richtige rauszusuchen hier noch die eventuell unklaren Instanzen/Variabeln hier sind dann noch
[Java]
private Canvas anzeige;
private int x1,x2, x3, y1, y2, y3;
private Panel p;
p=new Panel();
p.setBounds(400, 75, 600, 575);
p.setBackground(Color.lightGray);
frame.add(p);
[/Java]

So nun zu meinem Problem:
Wenn ich zum ersten Mal drei Seitenlängen eingebe und über einen Button die Methode paint(...) mit 6 dazugehörigen variabeln auslöse, wird alles richtig gemalt. Allerdings, wenn ich neue Seitenlängen eingebe, erneute den Button betätige, wodurch erneut paint(...), diesmal aber mit anderen Koordinaten, durchlaufen wird wird auf der Oberfläche/dem Pannel kein neues Dreieck gemalt, sondern das andere, alte Dreieck bleibt.
Ich weiß irgendwie nicht mehr was ich noch machen kann. Ich bin schon 10 mal mit dem Debugger durchgegangen und habe geguckt ob sich die Koordinaten auch ändern die übergeben werden und so weiter, aber ich glaube mir fehlt da etwas wissen zu der Klasse Canvas, da wir das in der Schule noch nicht so hatten. Wenn ihr es braucht kann ich auch nochmal den ganzen Quelltext hier reinstellen.
Ich bitte um Hilfe! =)

Vielen Dank schonmal, Blocko
 
B

Blocko

Gast
Eine Möglichkeit, die mir nicht gefällt, habe ich gefunden: (Änderung in der paint Methode von anzeige = new Canvas{...};
[Java]
public void paint (Graphics g)
{

g.clearRect(0, 0, 600, 575);
g.drawLine(x1,y1,x2,y2);
g.drawLine(x2,y2,x3,y3);


this.repaint();

}
[/Java]
Problem hierbei ist nur das er ja nun ständig die drei Linien neu malt, was zum einen ein flackern und zum anderen ein verlangsamen meines Rechners bewirkt...
 

Michael...

Top Contributor
!!!Kein repaint() in der paint() aufrufen!!
Ansonsten sollte es passen, oder besser:
Java:
public void paint (Graphics g) {
                super.paint(g);
                g.drawLine(x1,y1,x2,y2);
                g.drawLine(x2,y2,x3,y3); 
}

Wie forderst Du das Neuzeichnen an? Verwendest Du im Code etwa getGraphics() und rufst die paint(Graphics g) direkt auf? Anfordern von Neuzeichnen nur durch repaint()
 
B

Blocko

Gast
soo. ja das mit dem repaint() in der paintmethode finde ich auch nicht schön. aber leider macht er es malt er es immer noch nicht neu, wenn ich es so implementiere wie du geschrieben hast hier nochmal ein teil mehr...
[Java]
public void paint( int a, int b, int c, int d, int e, int f)
{


x1=a;
y1=b;
x2=c;
y2=d;
x3=e;
y3=f;

anzeige = new Canvas () {

/**
*
*/
private static final long serialVersionUID = 1L;

public void paint (Graphics g)
{

super.paint(g);
g.clearRect(0, 0, 600, 575);
g.drawLine(x1,y1,x2,y2);
g.drawLine(x2,y2,x3,y3);
g.drawLine(x1,y1,x3,y3);
//
// Polygon umriss = null;
// g. clearRect (0, 0, 600, 575);
// g. setColor (Color. black);
// umriss = new Polygon (new int [] {x1, x2, x3},
// new int [] {y1, y2, y3}, 3);
// g. fillPolygon (umriss);



}

};
anzeige.repaint();
p.add(anzeige);

anzeige. setVisible (true);

anzeige. setSize (600, 575);

anzeige. setLocation (0, 0);

}



public void auswerten(ActionEvent evt)

{


this.zahlumschreiben(0);
this.zahlumschreiben(1);
this.zahlumschreiben(2);
double [] Auslese = new double[3];
boolean loesbar;
try
{

int i;

for (i = 0; i <= 2; i++)
Auslese = 0;
for (i = 0; i <= 2; i++)
Auslese = this.getText(i);
for (i = 0; i <= 2; i++)
System.err.println(i + ": "+ Auslese); //TODO RAUSNEHMEN
loesbar = true;

}
catch (NumberFormatException ex) {
System.err.println("Nix da");
//TODO FEHLERMELDUNG
JOptionPane.showMessageDialog(null, "schlimm schlimm", "Test Titel", JOptionPane.OK_CANCEL_OPTION);


loesbar = false;

}
if (loesbar==true)
{
Dreieckberechnung d= new Dreieckberechnung(Auslese[0],Auslese[1],Auslese[2]);
boolean konstruierbar = d.getkonstruierbar();
if (konstruierbar==false)
{
aus[0].setText("NEIN!");//TODO
for (int i=1;i<6;i++)
aus.setText("Dreieck nicht konstruierbar");
}
else
{
int[]ko= d.getkoords();
this.paint(ko[0], ko[1], ko[2], ko[3], ko[4], ko[5]);
aus[0].setText("JA!");
aus[1].setText(""+d.getAlpha());
aus[2].setText(""+d.getBeta());
aus[3].setText(""+d.getGamma());
aus[4].setText(""+d.getFlaecheninhalt());
aus[5].setText(""+d.getUmfang());
}
}
}
[/Java]
hier ruft er die Paintmethode auf
[Java=99] this.paint(ko[0], ko[1], ko[2], ko[3], ko[4], ko[5]);[/Java]
ich hab schon versucht anzeige.repaint(); in zeile 42,44,46,48 einzuschreiben, aber da malt er es trotzdem nicht neu =(
die Variante mit dem super.paint(g) geht leider auch nicht.
 

Michael...

Top Contributor
Falsche Vorgehensweise: Du erzeugst ja jedesmal ein neues Canvas Objekt und fügst es in das Panel ein - vermutlich siehst Du die neu eingefügten Komponenten garnicht.

Du musst/darfst ausschliesslich die x1, y1... Werte ändern und danach einfach nur repaint() aufrufen.
 
B

Blocko

Gast
ohhh =) es funktioniert =)
VIELEN VIELEN DANK! das waren dann wohl meine Lücken bei Canvas!
Danke nochmal für die nette Hilfe =)

kann als erledigt makiert werden. THX
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Schnelleres Malen AWT, Swing, JavaFX & SWT 22
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
M Punkte malen AWT, Swing, JavaFX & SWT 1
M Schrift "malen" AWT, Swing, JavaFX & SWT 11
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
S JButton in JLabel malen AWT, Swing, JavaFX & SWT 7
E JButton Text malen AWT, Swing, JavaFX & SWT 3
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
K swing/awt Panel punkte malen AWT, Swing, JavaFX & SWT 4
G Auf Image malen AWT, Swing, JavaFX & SWT 12
B Wie Panel neu Laden/Malen/Aktualisieren AWT, Swing, JavaFX & SWT 14
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
V Framework zum Zeichnen/Malen? AWT, Swing, JavaFX & SWT 7
D bei Thread in JComponent malen NullPointerException AWT, Swing, JavaFX & SWT 3
J Einmal gleichzeitig auf zwei Graphics malen? AWT, Swing, JavaFX & SWT 5
C ".tif" Image in Java einbinden und malen lassen AWT, Swing, JavaFX & SWT 7
H auf einem Bild malen AWT, Swing, JavaFX & SWT 4
N malen => 1 Sekunde warten => malen AWT, Swing, JavaFX & SWT 2
V Punkte malen im Panel AWT, Swing, JavaFX & SWT 3
U Malen auf Buffered Image AWT, Swing, JavaFX & SWT 9
V Auf Knopfdruck malen ?????? AWT, Swing, JavaFX & SWT 5
SuperSeppel13 Komponente transparent übermalen AWT, Swing, JavaFX & SWT 2
F zeichnung nach bedingung mit weiß übermalen AWT, Swing, JavaFX & SWT 10
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
W Canvas oder Polygone? AWT, Swing, JavaFX & SWT 3
Monokuma Canvas Form entfernen AWT, Swing, JavaFX & SWT 2
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
M Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken AWT, Swing, JavaFX & SWT 3
dereki2000 AWT Canvas zeichnet nicht AWT, Swing, JavaFX & SWT 7
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
Prafy AWT Klickbare Bereiche auf Canvas AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX Canvas einfaches Zeichenprogramm AWT, Swing, JavaFX & SWT 7
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
L JavaFX Canvas max size? AWT, Swing, JavaFX & SWT 1
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
C Java FX Canvas missing getGraphicContext2D AWT, Swing, JavaFX & SWT 5
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
A JavaFX Menubar wird von Canvas überzeichnet AWT, Swing, JavaFX & SWT 8
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
Luk10 KeyBindings mit Canvas? AWT, Swing, JavaFX & SWT 3
B LookAndFeel GWT: Canvas in TabSet nicht sichtbar AWT, Swing, JavaFX & SWT 2
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
T Canvas clipping AWT, Swing, JavaFX & SWT 4
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Canvas Problem(Größe) AWT, Swing, JavaFX & SWT 6
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
M Wofür Canvas? AWT, Swing, JavaFX & SWT 5
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
lumo SWT Canvas transparent AWT, Swing, JavaFX & SWT 4
2 AWT Zeichnen in Canvas AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
T AWT canvas AWT, Swing, JavaFX & SWT 3
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
T SWT Canvas Koordinaten per MouseMove auslesen AWT, Swing, JavaFX & SWT 1
H Zeichnen auf smartgwt Canvas AWT, Swing, JavaFX & SWT 4
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
K Swing Sinuskurve zeichnen auf Canvas AWT, Swing, JavaFX & SWT 2
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
D Canvas soll angezeigtes jpg-Bild aktualisieren AWT, Swing, JavaFX & SWT 4
N zeichnen auf awt canvas AWT, Swing, JavaFX & SWT 9
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
J Canvas Inhalt als Bild speichern! AWT, Swing, JavaFX & SWT 16
T zeichnen mit canvas AWT, Swing, JavaFX & SWT 3
S repaint im Canvas AWT, Swing, JavaFX & SWT 3
D Canvas und Buttons AWT, Swing, JavaFX & SWT 20

Ähnliche Java Themen

Neue Themen


Oben