paint() in anderen Methoden

Status
Nicht offen für weitere Antworten.

Sladda

Aktives Mitglied
Hallo!
Ich habe folgende Klasse:

[HIGHLIGHT="Java"]public class Lampe {

private boolean leuchtet;
private int durchmesser = 50;
private int x;
private int y;


// Konstruktor fuer die Lampe
public Lampe(int x, int y){
leuchtet = false;
x= x;
y = y;
}
public void zeichneAn(Graphics g){
g.setColor(Color.RED);
g.fillOval(x, y, durchmesser, durchmesser);
}

public void zeichneAus(Graphics g){
g.setColor(Color.BLACK);
g.drawOval(x, y, durchmesser, durchmesser);
}

public void paint(Graphics g){
if(leuchtet)
zeichneAn(g);
else
zeichneAus(g);
}
}[/HIGHLIGHT]

Ich will nun in einer anderen Klasse (class Foo) in der main mehrere Lampen erzeugen und dann auf ein Canvas zeichnen (mit lampe.zeichneAus()) aber das klappt nicht (die kreise werden ganz kurz angezeigt und sind dann sofort wieder weg):

[HIGHLIGHT="Java"]public class Foo extends Frame{

class MyCanvas extends Canvas{
public void paint(Graphics g)
{
super.paint(g);
g.drawString("Canvas",10,20);
}
}

Lampe [] lampenArray = new Lampe[7];
Canvas c = new MyCanvas();

public Foo(){
//den super-Konstruktor (von Frame) aufrufen, damit auch ein Frame gezeichnet wird:
super("foo");
//den Frame auf die richtige Groesse setzen:
setSize(700, 700) ;
//und sichtbar machen:
setVisible(true) ;
//Canvas zum Frame hinzufuegen:
add(c);
}

public static void main(String[] args) {

Foo foo= new Foo();

for (int i=0;i<7;i++){
foo.lampenArray = new Lampe(50*i,50*i); //7 Lampen werden erzeugt und in das lampenArray eingefuegt
foo.lampenArray.zeichneAus(foo.c.getGraphics()); //und auf das Canvas gezeichnet
}

}

}[/HIGHLIGHT]
Ich mache bestimmt viel falsch mit paint usw, aber ich weiß einfach nicht wies richtig geht :(
Ich danke für jede Hilfe!
Gruß
Sladda

(PS: wieso kann man hier den code nicht mehr schön formatieren?)
 
Zuletzt bearbeitet von einem Moderator:

DarkLoG

Mitglied
Nur schnell in aller Kürze:

paint() in Lampe wird nie aufgerufen oder? paint() würde von Java nur dann automatisch aufgerufen wenn Lampe von irgendeiner Component abgeleitet wäre und dann müsstest du die "Lampen" natürlich auch dem Frame hinzufügen mit add() etc. - Alternativ könntest du vielleicht die paint()-Methode von Foo überschreiben und dort dann deine Schleife reinpacken, weil so gehst du die Schleife genau einmal durch und beim nächsten automatischen repaint ist natürlich alles wieder weg...

Gruß

DarkLoG
 

Marco13

Top Contributor
Das per Hand aufzurufen funktioniert so nicht. Du brauchst irgendeine Klasse, die von Component erbt. Eine instanz dieser Klasse kannst du dann in einen Frame legen. Und in der paint-Methode dieser Component kannst du dann zeichnen, was du willst. Ähnlich wie es jetzt schon beim Canvas ist. Du könntest (falls das Sinn macht) auch die Lampen in den MyCanvas legen, und dort nach dem
g.drawString("Canvas",10,20);
dann noch
lampe.paint(g);
aufrufen.
 

Sladda

Aktives Mitglied
Erstmal Danke für eure Antworten.

Allerdings habe ich überhaupt nichts davon hinbekommen.
Ich habe nun versucht alles was mit dem zeichnen zu tun hat in eine klasse zu packen, aber ich kriegs einfach nciht hin.
Das eigentliche Problem: Ich will ja nur ein paar Methoden haben, z.B. zeichneLampe(x,y) o.ä., die ich einfach auf einem Objekt (is ja erstmal egal welches) aufrufen kann, und dann soll aber auch die Lampe gezeichnet werden.
Mein (neuer) Versuch:

[HIGHLIGHT="Java"]class MyCanvas extends Canvas
{
public void paint(Graphics g)
{
super.paint(g);
g.drawString("Canvas",10,20);
}
}


public Canvas c = new MyCanvas();



public void zeichneLampe(int lampe, boolean an, Graphics g){
int x,y;
//if(lampe==1)
g.setColor(Color.BLACK);
g.drawOval(31, 39, 50, 50); ;
}

public void paint(Graphics g){
zeichneLampe(1,true,g);
}[/HIGHLIGHT]
Wie kann ich es denn bloß schaffen, dass ich zB irgendwann (z.B. auch bei einem buttton-klick) meinZeichner.zeichneLampe(1,true,g) aufrufen kann ??

Ich verstehe das mit dem paint einfach nich :(
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Man kann nicht Zeichnen. Punkt. Man kann nicht sagen: Zeichne jetzt dies-und-das da-und-da hin. Es geht nicht. Finde dich damit ab. (Auch wenn es nicht wirklich so ist ;) )

Erfeulicherweise kann man aber zeichnen LASSEN. Man kann eine Klasse erstellen, die von Canvas erbt, und eine Menge Zeichenbarer Objekte enthält. In ihrer paint-Methode zeichnet diese Klasse alle Objekte. Und man kann die Klasse so gestalten, dass man zeichenbare Objekte hinzufügen und entfernen kann.

In deinem Fall: Dein "MyCanvas" kann eine Liste von "Lampen" haben, und Methoden anbieten, um die Lampen hinzuzufügen oder zu entfernen. In seiner paint-Methode zeichnet er alle seine Lampen.

Dass man Lampen noch ein Flag geben kann, ob sie an oder aus sind, oder sonstwas, hat damit nichts zu tun.

Hier nochmal ein (etwas allgemeineres, aber immernoch nur hingehacktes) Beispiel.


Code:
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.*;

interface Paintable
{
    void paintOn(Graphics g);
}


class Lampe implements Paintable
{
    public void paintOn(Graphics g)
    {
        g.drawString("Ich bin eine Schreibtischlampe (mit EINEM 'sch')", 50, 50);
    }

}

class Painter extends Canvas
{
    private List<Paintable> paintables = new ArrayList<Paintable>();

    public void paint(Graphics g)
    {
        super.paint(g);
        for (Paintable paintable : paintables)
        {
            paintable.paintOn(g);
        }
        g.drawString("Canvas",10,20);
    }

    public void addPaintable(Paintable paintable)
    {
        paintables.add(paintable);
        repaint();
    }

    public void clear()
    {
        paintables.clear();
        repaint();
    }

}


class PaintableTest extends Frame
{
    public static void main(String args[])
    {
        new PaintableTest().setVisible(true);
    }

    Painter painter = new Painter();

    public PaintableTest()
    {
        setLayout(new BorderLayout());

        add(painter, BorderLayout.CENTER);

        Button b = new Button("add");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                zeichneLampe(1,true);
            }
        });
        add(b, BorderLayout.NORTH);

        b = new Button("clear");
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                zeichneLampe(1, false);
            }
        });
        add(b, BorderLayout.SOUTH);
        setSize(500,500);
    }


    public void zeichneLampe(int lampe, boolean an)
    {
        if (an)
        {
            painter.addPaintable(new Lampe());
        }
        else
        {
            painter.clear();
        }

    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben