SWT[1]#3

Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: SWT[1]#3

Beitrag von salami »

FreaK hat geschrieben:sag mal könnte mir einer in einfachen worten erklären was dieses "super();"
super ist der Konstruktor der Klasse von der deine Klasse erbt.

Beispiel:
Man kann ja so Buttons machen:
new JButton btn = new JButton("Beschriftung");
Also im Konstruktor wird die Beschriftung übergeben.
Wenn du jetzt eine Klasse machst, die von JButton abgeleitet ist, z.B. ein Button mit Farbverlauf im Hintergrund, dann kannst du dem z.B. so einen Konstruktor geben:

Code: Alles auswählen

public VerlaufButton(String txt, Color f1, Color f2) {
       super(txt);
       this.verlauffarbe1 = f1;
       this.verlauffarbe2 = f2;
}
Damit wird dann der originale Konstruktor verwendet um den Text einzustellen.

Aber die Konsturktoren der "Elternklassen" stellen ja nicht nur den Text ein, sondern könnten auch was anderes machen, deshalb ist es bei manchen Ableitungen nötig den Standardkonstruktor über super() aufzurufen.
FreaK
Beiträge: 10
Registriert: Sa 25. Apr 2009, 16:02

Re: SWT[1]#3

Beitrag von FreaK »

Danke erstmal an Salami

Aber ich hab irgendwie nen ganz anderes viel größeres problem ich bekomms einfach nicht hin überhaupt auch nur einen einzigen Punkt zu zeichnen.... :think:
das mit den Graphics hab ich mir schon mehr mals durchglesen aber das schiebt mich ja meistens einfach immer weiter bis ich irgendwann mal bei Shape/Stroke bin aber damit kann ich irgendwie auch nichts anfangen vor allem weiss ich auch nicht wie ich davon wieder zurück komm um ne Graphic zu erstellen.
Ich hab einfach überhaupt keine idee wie das Funktionieren soll :( . Die Api / Sun Tutorials helfen mir überhaupt nicht weiter da les ich jetzt mittlerweile schon seit 5 stunden drinen rum ohne wirklich nützliche informationen für mich raus zu bekommen. Könnte mir vlt. jemand ansatzweise verraten wie das zu funktionieren hat. :cry:

wäre nett
gruss
Tankwart
Beiträge: 133
Registriert: Do 20. Nov 2008, 13:56

Re: SWT[1]#3

Beitrag von Tankwart »

Ich poste mal meine Malmethoden:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken

Code: Alles auswählen

public void mousePressed(MouseEvent e) {
    	lastPoint = e.getPoint();
        draw(lastPoint);
    }

    public void mouseDragged(MouseEvent e) {
    	draw(lastPoint);
        lastPoint.x = e.getX();
        lastPoint.y = e.getY();

    }
Und die aufgerufene draw() Methode, GRAPHICS2D ist das Graphics2D Objekt auf das gezeichnet werden soll:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: auf Anzeigen klicken

Code: Alles auswählen

private void draw(Point p) {
    	int x = p.x;
        int y = p.y;
        GRAPHICS2D.fillOval(x, y, brushSize, brushSize);
        repaint(x, y, brushSize, brushSize);
    }
FreaK
Beiträge: 10
Registriert: Sa 25. Apr 2009, 16:02

Re: SWT[1]#3

Beitrag von FreaK »

Also

Code: Alles auswählen

public class DrawingPanel extends JFrame implements MouseListener,
									        MouseMotionListener
{...
    JPanel rootingPanel = new JPanel(new BorderLayout());
    rootingPanel.setBackground(Color.white);
    rootingPanel.setPreferredSize(new Dimension(400, 400));
    rootingPanel.addMouseListener(new MouseListener(){
    	@Override
	public void mouseClicked(MouseEvent e) {
		
	}
     .
     .
     .
    });
...}
so was in die richtung muss es ja sein oder ? das problem was ich jetzt hier hab ich z.B. das er einmal in der klasse und einmal im Panel alle mouseMotion methoden haben will :crazy: . Oder lieg ich da einfach komplett falsch ? und die drawing methode muss ja au noch im panel sein oder ?
ich versteh diesen Swing mist einfach irgendwie nicht :fool:

PS:
um mein Problem mal näher zu erläutern ich kann schon nach vollziehen was in den Methoden gemacht wird und so. Das was mir einfach nicht rein will bzw. was ich einfach nicht raus krieg ist wo das ganze zeug verankert bzw. eingebaut ist.
wie z.B. das wo ich oben geasgt wo gehören die Methoden rein ? bzw. diese Graphics2D wo wird das ding erzeugt bzw. rein gehauen ? ich meine du zeichnest ja nicht auf der Graphic sondern eigentlich auf nem Panel oder nicht ?
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: SWT[1]#3

Beitrag von salami »

Du hast ein Panel, auf dem du zeichnen willst. Weil du darauf zeichnen willst, kannst du nicht ein normales JPanel nehmen, weil das ja nicht dafür gemacht wurde als Zeichenoberfläche verwendet zu werden.

Also erstellst du eine eigene Klasse, die von JPanel erbt und Mouse(Motion)Listener implementiert. Das heißt, die Funktionen für die Listener kommen auch in die Klasse.

Noch passiert aber gar nichts wenn du z.B. draufklickst, weil du dem Panel diese Listener nicht zugewiesen hast. Also schreibst du in den Konstruktor deiner Klasse:

this.addMouseListener(this);
this.addMouseMotionListener(this);

this, weil die Funktionen ja in der aktuellen Klasse sind. Damit hast du die Maus-Events mit den Methoden in deiner Klasse verknüpft. Diese unübersichtliche Schreibweise wie in dem ersten Vorlesungsbeispiel ist hier dann nicht notwendig.

Mit unübersichtlicher Schreibweise meine ich das:

Code: Alles auswählen

this.addMouseListener(new MouseListener() {
.........

});
PS:
In der Klasse kannst du dann noch eine eigene Paint-Mothode schreiben, die übergibt dir automatisch das Graphics-Objekt auf dem du zeichnen kannst.
Benutzeravatar
kimbo
Beiträge: 16
Registriert: Sa 8. Nov 2008, 15:13
Kontaktdaten:

Re: SWT[1]#3

Beitrag von kimbo »

hi,
ich hab irgendwie immer noch probleme damit, überhaupt ein Graphics2D object zu erzeugen und auszugeben.

bisher sieht das ca. so bei mir aus:

Code: Alles auswählen

BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) img.getGraphics();
dann hab ich aber iwie probleme damit, das teil irgendwie auszugeben. und da ich nix ausgeben kann, kann ich irgendwie auch nich weitermachen. :fool:
ich kann nur zustimmen: ganz schön exercise booky das 1. ÜB! :o
q
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: SWT[1]#3

Beitrag von markusj »

Ich zitiere Mal den Ausschnitt aus A.Höfers eMail in der Mailinglist (liest die eigentlich keiner?)
@Override
public void paintComponent(Graphics g) {

g.drawImage(image, ...);

}
mfG
Markus
ryo
Beiträge: 143
Registriert: So 16. Nov 2008, 18:51

Re: SWT[1]#3

Beitrag von ryo »

Wie mache ich das, dass das in das image gespeichert wird? Das Image zu zeichnen ist kein Problem, aber wie sage ich dem, dass das, was ich da gezeichnet habe, ins Image reinsoll?

Ich habe das Programm bisher so, dass ich alles ohne Image mache, wodurch es aber beim verändern der Größe verloren geht.
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: SWT[1]#3

Beitrag von Thomas »

könnte mir vllt jemand ein tipp geben, wie man das mit dem resetten macht? bekomm das leider nciht hin, habs schon über en menu versucht und da dann ein event um das panel quasi neu zu machen das funktioniert dann aber nicht, hab dann imemr noch das gezeichnete aba kann keien farben und größen mehr auswählen^^
Edit: hab jetzt nen knopf der alles resetet aba nur wenn man das programm danach minimiert wenn man den knopf nicht drückt und minimiert bleibt das bild
Edit2: jetzt gehts, ich hoffe nur es darf nun wirklich beim zeichnen aussetzen so wie ichs gelesen habe und man muss nicht kommentieren weil das hab ich au nicht gemacht, oder hat jemand von euch kommentiert?
Zuletzt geändert von Thomas am Mi 6. Mai 2009, 23:41, insgesamt 1-mal geändert.
Chrisss
Beiträge: 63
Registriert: So 25. Jan 2009, 20:21

Re: SWT[1]#3

Beitrag von Chrisss »

hast du auch nach dem "reset" des bildes ein repaint() aufgerufen? sonst übernimmt die oberfläche die Änderung nicht

bei meinem reset zeichne ich einfach nen weises rechteck so groß wie die zeichenfläche selbst auf das gespeicherte Bild, dann ein repaint() und gut is
Antworten

Zurück zu „Übung“