PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Linie zeichnen



100
06.06.2010, 18:55
Hey, ich hoffe jemand kann mir bei meinem Vorhaben helfen, da ich nicht nur eine Lösung brauche, sondern auch gerne wissen möchte wieso man das so und so macht. Habe jetzt einige Minuten rumprobiert und komme einfach nicht weiter. Ich habe einige fertigen Klassen im Internet gefunden, die an sich funktionieren, aber die ich nicht mit meiner eigentlichen GUI verwenden kann. Und verstehen tu ich das ganze im Moment auch noch nicht wirklich..

Also ich möchte erstmal eine einfache Linie auf meiner GUI haben. Weiterführend werden es später ~500 "Linien" sein, die eine Art Graphen darstellen sollen. Als ich die Klasse Graphics gefunden habe, dachte ich, dass ich einfach immer ein Objekt für eine Linie erzeugen kann, mit entsprechenden Koordinaten, aber jetzt gestaltet sich das ganze doch sehr viel schwieriger.

1. Muss ich zwangsweise eine neue Klasse für eine Linie erstellen (wenn ja wie sähe diese Klasse geschickt aus?)
2. Wie kriege ich das dann geschickt in meine andere GUI rein.

Wenn möglich mit Erklärungen.. wäre euch sehr dankbar.

Hier mal eine Klasse die ich ausm Internet gezogen habe
import java.awt.*;
import java.awt.event.*;
public class Biene extends Frame
{
public Biene()
{
setSize( 500, 100 );
addWindowListener( new WindowAdapter() {
@Override
public void windowClosing ( WindowEvent e ) { System.exit( 0 ); }
} );
}
@Override
public void paint( Graphics g )
{
g.drawString( "\"Maja, wo bist du?\" (Mittermeier)", 120, 60 );
}
public static void main( String[] args )
{
new Biene().setVisible( true );
}
}


Bräuchte das heute noch, wäre euch für Hilfe echt dankbar ^^

Apex
06.06.2010, 19:08
Es kommt drauf an, ob du die Linie selber zeichnen willst per Hand oder ob sie automatisch gezeichnet werden soll. Dann kommts darauf an worauf du zeichnest ob du direkt ins Frame zeichnest.

Im Grunde genommen brauchst du einen Swing Komponenten und dafür wird PaintComponent gebraucht und für AWT brauchst du den Container Paint. Das hier is 'n Beispiel:

import java.awt.*;

class draw() extends Frame{

public draw(){
super();
this.setBounds(0,0,300,300);
this.setVisible(true);
}

public void Paint(Graphics g){
g.drawLine(0,0,100,100);
}
}

100
06.06.2010, 19:13
Ich arbeite mit dem Javaeditor, der beinhaltet auch einen schlechten GUI Editor.. wie auch immer, dadurch ergibt sich meine GUI Klasse:


public class GUI extends JFrame {
public GUI() {
super("Peter");
..
}
}Wie verwende ich nun deine Klasse, oder kann ich das direkt in meine GUI Klasse einbauen? Ansonsten müsste in der Klasse doch den Frame mitgeben, nur wie tu ich das?
Danke schonmal

/edit
Übrigens krieg ich bei deiner Klasse im Moment folgenden Fehler:
draw.java:1:11: '{' expected

Und ich weiß leider nicht wie das aussehen sollte :D

Apex
06.06.2010, 19:23
Mit ein bisschen überlegen kommste eigentlich selber drauf:

Du willst eine Linie zeichnen, das heißt du musst Koordinaten speichern du willst aber nicht sofort die Koordinaten speichern wenn die Maus im Frame ist sondern wahrscheinlich erst dann, wenn auf die Maus gedrückt wird. Jetzt musst du jede Mausbewegung überprüfen, das heißt XY+1, aber mit Grundwissen müsstest du das eigentlich wissen. Und am Ende kriegste eigentlich ne hübsche Klasse zusammen.

Schau dir das hier mal an: Java in 21 Tagen - Kapitel 9 (http://jerry.c-lab.de/java/21Tage/kap09.htm)

Dort wird erklärt, wie man die Graphicklassen von Java verwendet.


Mag dir nichts vorkotzen, bin halt 'n Mensch der will, dass die Leute selber was auf die Beine stellen und nicht Copy & Paste

100
06.06.2010, 19:46
Die Koordinaten sind fest.. die werden berechnet, sodass am Ende ein Graph entsteht.
Das Problem ist, dass ich aktuell nichts mit deiner Klasse anzufangen weiß, da ich einen Fehler bekomme und immernoch nicht weiß wie ich sie korrekt in meine eigentliche GUI Klasse einbinde.

Naja ich schau mir nochmal den Link auf, den hab ich nämlich neben 50 anderen heute schon gefunden ;)
Ich weiß nicht WIE ich das nun verwenden soll..


Mag dir nichts vorkotzen, bin halt 'n Mensch der will, dass die Leute selber was auf die Beine stellen und nicht Copy & PasteFind ich völlig in Ordnung, stehe halt nur gerade aufm Schlauch weil ich schon einiges probiert habe :/

Chiqsaw
06.06.2010, 19:53
Schau dir mal das an:



public class Raster extends Applet
{
public void init()
{
setBackground(new Color(255,255,255));
}

public void paint(Graphics stift)
{
stift.setColor(Color.LIGHT_GRAY);
for (int j=0; j<=500; j=j+10)
{
stift.drawLine(j,0,j,500);
stift.drawLine(0,j,500,j);
}
}

}

100
06.06.2010, 19:57
Da sagt er bei mir er weiß nicht welche Klasse Applet ist.
Ah warte vergiss es :D

Extend bedeutet, dass meine Klasse von dieser Klasse erbt ja?

Mein Problem ist wie gesagt, dass ich nicht weiß wie ich mit/in meiner eigentlichen GUI nun an die 500 Linien erzeuge. Muss ich ein Objekt der Klasse Raster erstellen, wenn die denn keine Fehler bekommen würde? Hatte das mal mit dieser Bienen Klasse da versucht, das hab ich aber auch nicht hinbekommen :(

/edit
Gut, aber wie male ich nun in meiner eigenen Form?
Raster test = new Raster();
Was muss ich übergeben.. muss ich überhaupt was übergeben. Ihr habt keine Ahnung wie verwirrt ich bin.

Chiqsaw
06.06.2010, 20:09
So wie du es anstellst übergibst du ein objekt warum schaust du dir nicht an WAS du bei meinem beispiel alles ändern kannst?

schau dir mal besonders :


for (int j=0; j<=500; j=j+10)
{
stift.drawLine(j,0,j,500);
stift.drawLine(0,j,500,j);

das an ;)

100
06.06.2010, 20:12
Es geht darum dass ich nicht weiß wie ich überhaupt irgendetwas auf MEINE GUI bekomme.
Auch wenn ihr glaubt ich bin etwas beschränkt im Kopf, WENN mal irgendeine Linie auftauchen würde, dann könnte ich diese auch selber erstellen.

Aber ich muss erstmal irgendetwas auf meine richtige GUI bekommen und ich weiß nicht wie ich das machen soll.

Chiqsaw
06.06.2010, 20:38
na mit einer mehode....
meine methode die ich verwende ist :


public void paint(Graphics stift)

100
06.06.2010, 20:49
Dann würde ich wie gewohnt in meine GUI Klasse schreiben
Raster r = new Raster();
r.paint();

Aber paint erfordert einen Parameter und ich weiß nicht was ich als Graphics übergeben sollte? Mal abgesehen davon, sagt er mir hier cannot find symbol: method paint() wenn ich nichts übergebe. Aber das ist denke ich mal normal.

Chiqsaw
06.06.2010, 20:53
Ähhhm xD
zeig mal bitte das was du bis jetzt hast ich verstehe einfach nicht woran dein fehler ist...

100
06.06.2010, 20:58
Okay also nochmal die Gesamtsituation:
Ich habe eine Klasse und eine dazugehörige GUI.. meine eigentliches Programm. Funktioniert alles prima.. und auf diese GUI möchte ich jetzt Linien zeichnen.

Die GUI Klasse sieht wie oben erwähnt so aus:


public class GUI extends JFrame {
// Anfang Attribute
...
// Ende Attribute
public GUI() {
// Frame-Initialisierung
super("Peter");
setDefaultCloseOperation(WindowConstants.DISPOSE_O N_CLOSE);
int frameWidth = 549;
int frameHeight = 605;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
...
}
}
Und da drauf möchte ich nun Linien zeichnen.

Chiqsaw
06.06.2010, 21:31
mhm ganz ehrlich gesagt verstehe ichd ein source nicht oO
was soll das ganze bringen??? -.-

das ganze macht für mich kein sinn -.-

lern doch erstmal ganz normal auf nem frage zu zeichnen OHNE die auflösung und was weis ich was zu definieren/ermitteln.. xD

verstehst du den sopurce den ich ich gepostet habe?

100
07.06.2010, 13:43
Das ist ein ganz gewöhnlicher Source einer GUI.. der GUI die zu meinem Programm passt.. mit Buttons einer Tabelle und allem drum und dran. Aus VB Zeiten ist mir das als FORM bekannt. Und wenn du selber wüsstest wovon du sprichst, dann müsstest du mir eigentlich auch sagen können, wie ich jetzt auf DIESE Form zeichnen kann.

Den Code an sich verstehe ich ja, bloß nicht inwiefern ich ihn jetzt anwenden kann bzw. was ich dafür tun muss. Und du anscheinend auch nicht^^

/edit

So eine einfache Lösung wäre Folgendes gewesen:

Graphics2D g = (Graphics2D) jPanel1.getGraphics();
g.drawLine(1,1,100,100);Ein Hoch auf meinen Info Lehrer
Für den Fall, dass jemand mal dasselbe Problem hat ;)