WinFuture-Forum.de: Java -- Paint()-methode Funzt Nicht - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java -- Paint()-methode Funzt Nicht


#1 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

  geschrieben 23. August 2006 - 16:34

Hallo,

kaum mal 5 Monate nicht gecodet und gleich wieder haufnweise probs ...

ich finde einfach nicht den Grund, weshalb die paint()-Methode nicht klappt - er bringt die fehler:

Keppler.java:70: illegal start of expression
public void paint(Graphics g) {
^
Keppler.java:73: ';' expected
}
^
2 errors


der Code - er soll bei Buttonklick einfach nur ne Linie zeichnen:

import java.awt.*;
...

public class Keppler extends Frame {

  boolean draw = false;

  Color black = new Color(0x00,0x00,0x00);
  Color hf = new Color(0xFF,0xFF,0xF0);

  private Button button1 = new Button();

  public Keppler(String title) {
	super(title);
	addWindowListener(new WindowAdapter() {
	  public void windowClosing(WindowEvent evt) { System.exit(0); }
	});
	setSize(500, 400);
	setBackground(hf);
	Panel cp = new Panel(null);
	add(cp);

	button1.setBounds(10, 10, 120, 20);
	button1.setLabel("Gooo!!");
	cp.add(button1);
	button1.addActionListener(new ActionListener() {
	  public void actionPerformed(ActionEvent evt) {
		button1ActionPerformed(evt);
	  }
	});

	setVisible(true);
  }

  public void button1ActionPerformed(ActionEvent evt) {
	draw = true;
  }

  public void paint(Graphics g) {
	g.setColor(black);
	if(draw == true) {
	  g.drawLine(42,42,100,100);
	}
  }

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



kann mir jemand helfen? vielleicht siehts jemand auf Anhieb?

MfG
du ciel

Dieser Beitrag wurde von du ciel bearbeitet: 23. August 2006 - 18:12

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 23. August 2006 - 16:40

Geht so nicht.
Du kannst keine Methode innerhalb einer anderen Methode implementieren.
Edit: Falsch ausgedrückt. Kann man schon, aber in dem Fall ist es falsch

paint ist zudem - in deinem Fall - eine Methode die du von Frame vererbt bekommen hast und die du für dich implementieren kannst.

Vereinfacht würde das so aussehen:

public class Foo extends Frame {
public void paint(Graphics g) {
	  g.drawLine(42,42,100,100);
	}
}

Dieser Beitrag wurde von Witi bearbeitet: 23. August 2006 - 16:41

0

#3 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 23. August 2006 - 16:54

Hi Witi,

danke erstmal ... aber wenn ich es so mache wie du sagst, wie soll ich dann die Aktion an den Buttonklick knüpfen? ... abgesehen davon kommt zwar keine Fehlermeldung mehr - gezeichnet wird aber auch nichts :(
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 23. August 2006 - 17:04

Guck dir mal das Beispiel hier an. Ist jetzt zwar ein Applet aber erklärt trotzdem vieles.
Wirst u.a. erkennen, dass nicht du die Methode aufrufst :(
http://www.cs.clemson.edu/~cs428/resources.../JTGraphEx.html
0

#5 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 23. August 2006 - 18:15

ich habs jetzt mal äquivalent zu dem bsp. gemacht - leider ohne erfolg, wenn ichs in einem applet mache funkt es auch, aber nicht in einem frame ... hat das irgendwie mit dem aufruf des frames zu tun? ... hmm


hab oben mal den aktuellen code reingesetzt - ähnlich dem bsp-link

Dieser Beitrag wurde von du ciel bearbeitet: 23. August 2006 - 18:48

0

#6 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 23. August 2006 - 19:37

es muss irgendwie an folgender Zeile hängen:

add(cp);

lass ich diese weg, funzt alles, nur sind dann leider keine Buttons da ... zumal mein Java-Editor bei hinzufügen eines Buttons diesen Befehl automatisch anlegt ...

weiß jemand wie man das umgehen kann?
0

#7 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 24. August 2006 - 06:43

Ne ist schon korrekt so.

Du zeichnest auf einem Panel. Das Panel "schwirrt" aber erst im System rum.
Mit der Methode add der Klasse Frame fügst du ein Objekt dem Frame zu. In dem Fall legst du das Panel auf das Frame so dass es sichtbar ist.

Und die Buttons siehst du dann nicht mehr, weil das Panel ganz oben liegt also auch über den Buttons.
0

#8 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 24. August 2006 - 07:59

weißt du wie ich dem abhelfen kann? wenn ich mit der Methode add der Klasse Frame das Objekt Panel dem Frame hinzufüge, gerade dann ist der Button ja zu sehen - also beisst es sich ja doch irgendwie mit der paint-methode, diese wohl zwar gezeichnet wird aber jedesmal von dem panel überschrieben wird ...

Ist die Schlussfolgerung daraus, dass ich innerhalb eines Frames 'mehrere' Ebenen/Layer definieren sollte - einen für Bedienelemente - einer für Grafikausgabe? ... nur machts das ganze nicht gerade leicher :-/
0

#9 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 24. August 2006 - 08:11

Du kannst ja beispielsweise die Location der einzelnen Elemente angeben. ButtonA befindet sich an den Koordinaten X Y und PanelB an den und den Koordinaten.

Alternativ - ist wenn man es verstanden hat auch einfacher - das Einsetzen eines Layout-Managers
0

#10 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 24. August 2006 - 08:55

Moin,

benutzt du aus einem bestimmten Grund nur AWT? Das Problem hier ist ja, daß das Panel cp deinen gesamten Frame ausfüllt, deine paint()-Methode aber im Frame malt. Wenn du statt einem Panel hingegen ein JPanel nimmst und dieses mit setOpaque(true) transparent machst, dann wird es funktionieren.
Alternativen, wenn du in AWT bleiben willst: Panel-Klasse extend-en und dort den Hintergrund nicht zeichnen oder mittels LayoutManager die Grösse des Panels cp auf den oberen Bildrand beschränken.
0

#11 Mitglied ist offline   du ciel 

  • Gruppe: aktive Mitglieder
  • Beiträge: 148
  • Beigetreten: 03. Dezember 04
  • Reputation: 0

geschrieben 24. August 2006 - 19:10

thx euch, dann weiß ich jetzt wo ich nachhaken muss ... werd mir mal den layoutmanager zu gemüte führen


MfG
du ciel
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0