Zeichnen - wie von außen bestimmen, was gezeichnet werden soll?

Q

qwertzii33

Gast
Guten Tag,
ich hab ein Applet gemacht, auf dem etwas gezeichnet werden soll.
Das Applet hab ich Drawing genannt. In dem Applet gibt es eine "public void"-Methode, die alles zeichnet.
Aber die brauch ich gar nicht aufzurufen, wenn ich "Run Applet" mache, malt er automatisch.
Nehmen wir jetzt an ich möchte das aufrufen von einer anderen Methode aus und der Informationen zum Zeichen mit geben.
Wie mach ich das?

z.b.
class test
{
Drawing k = new Drawing;

}
 
Zuletzt bearbeitet von einem Moderator:

KYLT

Mitglied
Quick and simple: Definiere dir Attribute, die du auch von außen setzen kannst.
Diese kannst du dann innerhalb der Zeichenmethode passend auswerten.
Code:
public class test
{
Drawing k = new Drawing();
  k.setWert1(1);
  k.repaint();
} 

public class Drawing {
  private int wert1;
  public void setWert1(int w1) {
    wert1 = w1; 
  }
  public void zeichenmethode() {
       if(wert1 == 1){
          // Mache was
      }
  }
}
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Quick and simple: Definiere dir Attribute, die du auch von außen setzen kannst.
Diese kannst du dann innerhalb der Zeichenmethode passend auswerten.
Code:
if(wert1 == "test){
Neben dem syntaktischen Fehler gibts auch noch einen allgemeinen Fehler. Referenzen (und damit auch String-Objekte) werden mit equals() verglichen.

@qwertzii33: Kannst du noch etwas konketer werden? Wie heißt die Zeichnen-Methode in deinem Applet? Am besten du postest mal etwas Code, sonst wird das hier nichts.
 
Q

qwertzii33

Gast
Java:
//Zeichenklasse

import java.awt.*;
import java.applet.Applet;

public class jPainter extends Applet
{
    /**
     * Liste an Informationen
     * Anzahl der Knoten
     * Größe der Adjazensmatrix
     */
    int anzahl = 8; //Anzahl der Knoten
    int i=0; //Zähler für Knoten
    int g2_x,g3_x,g4_x,g5_x,g6_x,g7_x,g8_x,g9_x; //Start&&Endpunkte der Kanten
    int g2_y,g3_y,g4_y,g5_y,g6_y,g7_y,g8_y,g9_y; 
    private boolean [][] adjazenzmatrix;
    


    public void paint(Graphics g)
        {
            //Knoten werden gemalt
            Graphics2D g2 = (Graphics2D) g;
                g2.setColor(Color.red);
                g2.fillOval(200,50,100,50);
                g2_x=250;
                g2_y=100;
                i++;

....
// hier ist ein fehler
for (int i = 0; i < anzahl; i++ ) 
                    { 
                            for (int j = 0; j < anzahl; j++) 
                                { 
                                    if (adjazenzmatrix[i][j])
                                        {
                                            Graphics2D k1 = (Graphics2D) g;
                                            g.drawLine(g'j'_x,g'j'_x,(g'i'_x,g'i'_x);
                                            
                                        }
                                 }
                                    
                      }

Ok also das oben ist die Klasse und dazu soll ein TestProgramm erstellt werden. Das das Applet aufruft. Es müsste z.b. jetzt auch noch die Anzahl übergeben. Hier hab ich das einfach mal mit in die Klasse gemacht. Aber das klappt bei mir nicht dann streickt er beim zeichnen.

Und dann hätte ich noch ein Frage zu dem Text nach dem ...
dieses g'j'_x ist falsch. Das hab ich nur so geschrieben damit man das erkennt.
Ich möchte das z.b. wenn i=1 und j=2 (in der Wertetabelle)
das er dafür dann g2_x schreibt und malt.
Wie kann ich das erzeugen?
Vielen vielen Dank qwertzii33
 

L-ectron-X

Gesperrter Benutzer
Ok also das oben ist die Klasse und dazu soll ein TestProgramm erstellt werden. Das das Applet aufruft.
In den meisten Fällen sollte ein Applet nicht von einer anderen Klasse aufgerufen werden. Dafür ist ein Browser da.
KYLT hat da schon Recht, wenn er sagt, dass du passende Methoden in deine Applet-Klasse einbauen sollst, mit denen du Werte ins Applet übergeben kannst.
Das Applet sollte dann diese Werte auswerten und entsprechend zeichnen.
Zum Neuzeichnen wird ein Applet immer
Code:
repaint()
aufrufen müssen.

Grundsätzlich dient die paint()-Methode in AWT-Klassen zum Zeichnen.
Um Unterscheidungen zu treffen und nach bestimmten Bedingungen zu zeichnen, musst du mit if-Anweisungen oder switch-Konstrukten arbeiten.
 
Q

qwertzii33

Gast
Wir haben in der Schule ein Programm entworfen mit dem einen Graphen mathematisch eingegeben konnte und auf charistika untersuchen konnte. der Benutzer gibt das über ein Fenster ein. Und ich wollte das wenn z.b. Graph Malen eintippt. der Baum gemalt wird & z.b. die Anzahl der Knoten übergeben wird, weil man die zum malen braucht.
 
Q

qwertzii33

Gast
Also ich hab die Test Klasse erstellt.
Der Wert wird übergeben allerdings öffnet sich kein applet und malen tut er auch nichts.
 
Q

qwertzii33

Gast
OK tut mir leid. Hier kommt alles:

[JAVA=42]
public class test
{
private boolean [][] adjazenzmatrix;
test()
{

jPainter k = new jPainter();
adjazenzmatrix = new boolean [4][5];


int anzahl = 5;
k.getInfo(anzahl);


for (int i = 0; i < anzahl; i++ )
{
for (int j = 0; j < anzahl; j++)
{
if (adjazenzmatrix[j])
{
k.AdjaFill(i,j);
}
}

}
}
}
[/code]
&&sowie
[JAVA=42]
import java.awt.*;
import java.applet.Applet;

public class jPainter extends Applet
{
/**
* Liste an Informationen
* Anzahl der Knoten
* Größe der Adjazensmatrix
*/
int anzahl = 8; //Anzahl der Knoten
int i=0; //Zähler für Knoten
int g2_x,g3_x,g4_x,g5_x,g6_x,g7_x,g8_x,g9_x; //Start&&Endpunkte der Kanten
int g2_y,g3_y,g4_y,g5_y,g6_y,g7_y,g8_y,g9_y;
private boolean [][] adjazenzmatrix;


public void getInfo(int anzahlIN) //jPainter erhält die Informationen über die gesammte Anzahl
{
if(anzahlIN>8)
{
System.out.println("Error");
}
else
{anzahl = anzahlIN;
adjazenzmatrix = new boolean[anzahl][anzahl];}
}


public void AdjaFill(int a, int b) //Übertragung der Adjazenzmatrix zwischen Graph & jPainter
{
adjazenzmatrix[a]=true;
}




public void paint(Graphics g)
{
//Knoten werden gemalt
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.red);
g2.fillOval(200,50,100,50);
g2_x=250;
g2_y=100;
i++;
if(i<anzahl)

....


/** for (int i = 0; i < anzahl; i++ )
{
for (int j = 0; j < anzahl; j++)
{
if (adjazenzmatrix[j])
{
Graphics2D k1 = (Graphics2D) g;
g.drawLine(g'j'_x,g'j'_x,(g'i'_x,g'i'_x);

}
}

} */

[/code]
Wenn ich alles richtig gemacht haben müsste, müsste aus dem Test Programm. Die Adjazenzmatrix kopiert werden, sowie die Anzahl übergeben werden.
1.) Sind die Felder, wenn ihnen noch kein wert zu gewiesen wurde auf false?
2.) wie kriegt man bei dem Text nach ... diese i in der Schleife mit in den Namen zu aufrufen? (siehe 2 post höher)
3.) Also die Daten übernimmt er, aber er öffnet kein Applet dannach und malt das auf
 

L-ectron-X

Gesperrter Benutzer
Wie oben schon gesagt, stimmt dein Konzept nicht.
Ein Applet läuft in einem Browser. Ein Applet hat mindestens eine init()-Methode.

Warum muss es ein Applet sein? Dir fehlen auch die Grundlagen. Es wird nicht einfach, dir zu helfen.
 
Q

qwertzii33

Gast
Es muss gar kein Applet sein. Ich dachte das geht damit.
Kann mit was anderem so einen Graphen auch malen? Was wäre da zu empfelen
 
Q

qwertzii33

Gast
OK ich bin versuchs grat mit einem normalen Fenster. (oder was auch immer das ist in einer normalen klasse)
Das einzige Problem ist.
Ok ich geb alle meine Variablen ein. DIe werden geändert.
Aber wie ruf diesen Paint-Vorgang auf?
repaint(); kennt er nicht.
und wenn dann erwartet er graphic g, was ich nicht habe.
Warum funktioniert nicht das wie eine normale Methode?
 
Q

qwertzii33

Gast
ok ich hab es gelesen, aber die haben alle eine statische Methode.
Wie kriegt man das hin, dass man ganz normal so eine Klasse erstellt.
Dann durch Methoden informationen in die Klasse liefert.
Und dann mit einer weiteren methode das zeichnen lässt.
 
Q

qwertzii33

Gast
ok srry. Ich hatte das falsch formuliert.
Ich hab jetzt die Klasse
class Drawing
Java:
class D0
{
public void Zeichnung(Graphic g)
{
//malen
}
}

Wie rufe ich diese Methode von außen auf
D0.Zeichnung();
Aber was kommt in die Klammern?
 
Q

qwertzii33

Gast
unter deinem Link steth ATW ruft, diesen Vorgang auf.
Aber wie bring ich das dazu das aufzurufen?
Er will keine repaint methode annehmen.
 

L-ectron-X

Gesperrter Benutzer
Du brauchst eine Klasse, in der zu zeichnen kannst. Im AWT gibts dafür Canvas oder Panel. In Swing wäre das JComponent oder JPanel. Ich nehme meist ein JPanel. Mit AWT müssen sich heute nur noch Einsteiger beschäftigen...

Wenn du nun in einem Panel oder JPanel zeichnen willst, erzeugst du eine Klasse, die davon erbt.
Also bspw.
Java:
public class DrawingPanel extends JPanel {
...
}

Dann überschreibst du die Methode des Objektes, die für das Zeichnen verantwortlich ist.
In einem Panel ist das paint(Graphics g).
In Swing-Komponenten wird die paintComponent(Graphics g)-Methode überschrieben.
Also bspw.
Java:
protected void paintComponent(Graphics g) {
   super.paintComponent(g);
   
   //Zeichnen eines Kreises:
   g.drawOval(10, 10, 80, 80);
}

Wenn dir das alles fremd vorkommt, solltest du mit einem Einsteigerbuch beginnen.
Ansonsten gibts jetzt das nächste Tutorial zum Lesen: Einsteigertutorial - Aufbau eines Vectorgrafikprogramms
 
Q

qwertzii33

Gast
das hab ich alles so, aber erzeichnet nichts bei mir.
Überhaupt kann man die Methode gar nicht aufrufen, weil ich nicht weiß was ich reinstecken muss.
 
Q

qwertzii33

Gast
Java:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

 
public class jStart extends JFrame
{
 
    public jStart(int k) 
    {
        super("Show ya graph");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setAlwaysOnTop(true);
        this.setLocationByPlatform(true);
        this.setSize(500, 500);
        this.add(new jPainter(k)); 
        this.setVisible(true);
    }

 
public class jPainter extends JPanel
{
    int size = 8,i = 0;
    public boolean [][] adjazenzmatrix;
    public String [] name; 
    private int [] x_cord;
    private int [] y_cord;
    
    public jPainter(int getSize) 
      {
        size = getSize;
        name = new String[size+1];
        adjazenzmatrix = new boolean[size][size];
        x_cord = new int[9];
        y_cord = new int[9];
        
        //Positionsangaben der Kanten
        x_cord[1]=250;
        y_cord[1]=100;
        x_cord[2]=175;
        y_cord[2]=175;
        x_cord[3]=325;
        y_cord[3]=175;
        x_cord[4]=250;
        y_cord[4]=250;
        x_cord[5]=198;
        y_cord[5]=115;
        x_cord[6]=300;
        y_cord[6]=115;
        x_cord[7]=177;
        y_cord[7]=219;
        x_cord[8]=327;
        y_cord[8]=219;        
              
    }
    
    public void getName(int x,String y) //jPainter erhält die Knotennamen
        {
                name[x+1] = y;
        }
        
 
    public void getAdja(int a, int b) //Übertragung der Adjazenzmatrix zwischen Graph & jPainter
        {
            adjazenzmatrix[a][b]=true;

        }
     public void repaint()
     {
         super.repaint();
        }
 

    
    
    
    
    public void paintComponent(Graphics g) 
        
        {
            super.paintComponent(g);
            g.fillOval(200,50,100,50); // Knoten malen
             ....
                            
            
        }
    }
}


Ok!!! Also bis jetzt klappt das super.
ich kann jStarter aufrufen mit einer Methode von außen.
Wenn ich das mit BlueJ starte kann ich ja diese Graphic erstellen.
Aber wie greife ich nun über jStarter auf die anderen Funktionen zu. -> getName usw.
und dann möchte ich ihn neu zeichnen lassen. -> repaint methode aufrufen

Wie funktioniert das?
 

L-ectron-X

Gesperrter Benutzer
Aber wie greife ich nun über jStarter auf die anderen Funktionen zu. -> getName usw.
Ich dachte du wüsstest, wie man Instanzen erzeugt und auf ihnen Methoden aufruft... :eek:

Klassennamen schreibt man groß, Methodennamen klein und alles immer schön CamelCase.
get()-Methoden sollten etwas zurückgeben, void ist verkehrt.
Eine Methode zum Setzen von Werten, sollte man mit set... beginnen lassen.
 
Q

qwertzii33

Gast
Ja schon aber ich check das nicht so ganz mit dem this.
müsste ich das dann mit
this.getAdja(5,5);
aufrufen. das funktioniert hier aber nicht so ganz.
 

L-ectron-X

Gesperrter Benutzer
Mit
Code:
this
kannst du nur auf Variablen und Methoden der Klasse zugreifen, in der du sich gerade befindest.
Du brauchst also ein Objekt/Instanz der Klasse, deren Methoden du aufrufen möchtest.
Java:
JPainter jPainter = new JPainter(10);
jPainter.setAdja(5,5);
So in etwa.
 

L-ectron-X

Gesperrter Benutzer
In deiner setAdja()-Methode übergibst du die Werte ins Objekt. Mit Aufruf von repaint() am Ende der Methode wird das eigentliche Zeichnen angestoßen und die paintComponent()-Methode ausgeführt, in welcher dein Code zum Zeichnen stehen muss.

Ansonsten hast du wirklich ausreichend Beispiele in den Tutorials.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
P Kurven zeichnen Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
M Farbiges Rechteck zeichnen Java Basics - Anfänger-Themen 2
M Zeichnen in Java Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben