Paint Methode externer auruf

A0D0S0

Mitglied
Hallo,
bin gerade dabei mir n kleines Hangman Spiel zu schreiben.
Hangman steht soweit , jetzt bin ich bei der Grafikklasse, nur die will nicht so ganz wie ich will

DAS ist die Graphics Klasse zum zeichnen:
Java:
import java.awt.*;
import java.awt.Graphics;
import javax.swing.*;
/**
 * Beschreiben Sie hier die Klasse HangmanGraphic.
 * 

 * @version 2011-09-23
 */
public class HangmanGraphic extends JPanel
{
    private int level = 0;

    public HangmanGraphic(){
        Dimension d = new Dimension(400,400);
        setPreferredSize(d);
    }
   
    public void paint(Graphics g){
        
        if(getLevel()  == 1){
            g.drawLine(300,300,300,100);
            repaint();
            System.out.println(level);
        }
        if(getLevel()  == 2){
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
            System.out.println(level);
        }
        if(getLevel()  == 3){
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 4){
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 5){
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 6){
            g.drawLine(170,143,170,185);
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 7){
            g.drawLine(170,160,150,150);
            g.drawLine(170,143,170,185);
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 8){
            g.drawLine(170,160,190,150);
            g.drawLine(170,160,150,150);
            g.drawLine(170,143,170,185);
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 9){
            g.drawLine(170,185,155,198);
            g.drawLine(170,160,190,150);
            g.drawLine(170,160,150,150);
            g.drawLine(170,143,170,185);
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }
        if(getLevel()  == 10){
            g.drawLine(170,185,186,199);
            g.drawLine(170,185,155,198);
            g.drawLine(170,160,190,150);
            g.drawLine(170,160,150,150);
            g.drawLine(170,143,170,185);
            g.drawOval(161,123,20,20);
            g.drawLine(170,100,170,123);
            g.drawLine(250,100,300,150);
            g.drawLine(300,100,170,100);
            g.drawLine(300,300,300,100);
            repaint();
        }

    }

    public void setLevel(int level){
        this.level = level;
    }

    public int getLevel(){
        return level;
    }
}

in nem Panel wird bei jedme Buttondruck (nur zum Test) oder wie beim Hangman wenn ein falsches Wort eingegeben wurde ein Strich gezeichnet.

Nun habe ich festgestellt , dass wenn ich da Level neu setzte er nicht überprüft, wie hoch es ist und dementsprechend zeichnet ( er geht nicht in die paint Methode ren) (deshalb die Printlns bei der Abfrage ;))


Hier mein Panel:
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;

public class testPanel extends JPanel{
	
	private Button addtest;
	private HangmanGraphic h = new HangmanGraphic();
	private Panel p1,p2;
	public testPanel(){
		addtest = new Button("Listadd");
		
		p1 = new Panel();
		p2 = new Panel();
		
		this.setLayout(new BorderLayout());
		this.add(p1,BorderLayout.CENTER);
		this.add(p2,BorderLayout.EAST);
		
		p1.add(new HangmanGraphic());
		p2.add(addtest);
		
		ActionHandler h = new ActionHandler();
	
		addtest.addActionListener(h);
		
		
	}
	private class ActionHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e){
        	if(e.getSource()==addtest){
        	    h.setLevel(h.getLevel()+1);
        	    repaint();
        	}
        }
    }
}


Die GUI Klasse :
Java:
import java.awt.*;
import javax.swing.*;

/**
 * GUI - Applikation des Hangman Spiels
 * 

 * @version 2011-09-23
 */
public class testGUI extends JFrame
{
    public static void main(String[]args){
        new testGUI();
    }

    public testGUI(){
        setSize(500,500);
        setTitle("Hangman");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.add(new testPanel());
    }
}

Repaint und sonstige Methoden schon alle ausprobiert.
Vielleicht kommt einer von euch drauf, wo das Problem liegt.

Vielen Dank schon im Voraus ,
Greez A0D0S0
 

Michael...

Top Contributor
Die Aufrufe von repaint() gehören/müssen aus der paint(...) von HangmanGraphic raus. (üblicherweise überschreibt man bei Swing Komponenten paintComponent(Graphics g))
Ich würde in der setLevel(...) am Ende ein repaint() aufrufen.
Dann existieren zwei Objekte von Typ HangmanGraphic und der ActionListener ruft setLevel an dem auf, welches nicht in der GUI verbaut ist.

Tipp: Wenn man die zu zeichnenden Linien in einer List oder einem Array hält könnte man das levelabhängige Zeichnen des Galgens viel kompakter gestalten.
 

Marco13

Top Contributor
Jup, sowas wie
Java:
if(getLevel() >= 1) zeichneErsteLinie();
if(getLevel() >= 2) zeichneZweiteLinie();
if(getLevel() >= 3) zeichneDritteLinie();
...
würde auch schon helfen.... oder ein Array eben...
 

A0D0S0

Mitglied
Die Aufrufe von repaint() gehören/müssen aus der paint(...) von HangmanGraphic raus. (üblicherweise überschreibt man bei Swing Komponenten paintComponent(Graphics g))
Ich würde in der setLevel(...) am Ende ein repaint() aufrufen.
Dann existieren zwei Objekte von Typ HangmanGraphic und der ActionListener ruft setLevel an dem auf, welches nicht in der GUI verbaut ist.

Tipp: Wenn man die zu zeichnenden Linien in einer List oder einem Array hält könnte man das levelabhängige Zeichnen des Galgens viel kompakter gestalten.

Hallo,schonmal danke für die Antwort.

Habe jetzt alle repaints aus dere paint Methode entfernt und eins bei der setLevelMethode der Graphics - Class reingegeben, trotzdem keine Striche :/

greez A0D0S0
 

Marco13

Top Contributor
Nicht AWT (Panel, Frame) und Swing (JPanel, JFrame...) mischen. Lieber nur Swing.

Aufpassen welches HangmanGraphic dort zum anzeigen zum Panel hinzugefügt wird: Du hast ZWEI HangmanGraphic-Objekte erstellt.
Java:
class testPanel extends JPanel{

    private JButton addtest;
    private HangmanGraphic h = new HangmanGraphic();
    private JPanel p1,p2;
    public testPanel(){
        addtest = new JButton("Listadd");

        p1 = new JPanel();
        p2 = new JPanel();

        this.setLayout(new BorderLayout());
        this.add(p1,BorderLayout.CENTER);
        this.add(p2,BorderLayout.EAST);

        p1.add(h); // Hier das oben erstellte HangmanGraphic verwernden
        p2.add(addtest);

        ActionHandler h = new ActionHandler();

        addtest.addActionListener(h);


    }
    private class ActionHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e){
            if(e.getSource()==addtest){
                h.setLevel(h.getLevel()+1);
                repaint();
            }
        }
    }
}
 

Michael...

Top Contributor
wie gesagt erzeugst Du zwei HangmanGraphic Objekte einmal im Deklarationsteil und ein neues anonymes im Konstruktor. (hier sollte wohl eher das bereits exitierende verwendet werden)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
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
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 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
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
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 paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
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
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3
T Paint-Methode geht nicht AWT, Swing, JavaFX & SWT 5
F Paint-Methode Überschreiben macht Refresh-Fehler ? AWT, Swing, JavaFX & SWT 8
B paint methode wiederholen AWT, Swing, JavaFX & SWT 6
G Problem mit paint Methode und Buttons AWT, Swing, JavaFX & SWT 10
T JPanel - paint Methode?, aber wie AWT, Swing, JavaFX & SWT 13
K paint-Methode überschrieben - trotzdem JComponenten zeichnen AWT, Swing, JavaFX & SWT 5
bummerland paint Methode AWT, Swing, JavaFX & SWT 2
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
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
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 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
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
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
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
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
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
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
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 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
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
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
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
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
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
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
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
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

Ähnliche Java Themen

Neue Themen


Oben