paint() methode von externer Klasse aufrufen

A0D0S0

Mitglied
Hallo,
ich bin grad dabei n kleines Hangman zu programmieren. Hab alles fertig doch ich schaffe es einfach nicht, das Strichmännchen zu zeichnen. Die folgenden Codeschnipsel sind nur zum testen gedacht. Normalerweise wird das Level in Hangman gesetzt wenn etwas falsches eingegeben wurde.

Hier die Graphics - Klasse

Java:
public class HangmanGraphic extends JPanel
{
    private int level = 0;

    public HangmanGraphic(){
        Dimension d = new Dimension(400,400);
        setPreferredSize(d);
    }

   
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        
        
        if(getLevel()  == 1){
            g.drawLine(300,300,300,100);
        }
        if(getLevel()  == 2){
            g.drawLine(300,100,170,100);
        }
        if(getLevel()  == 3){
            g.drawLine(250,100,300,150);
        }
        if(getLevel()  == 4){
            g.drawLine(170,100,170,123);
        }
        if(getLevel()  == 5){
            g.drawOval(161,123,20,20);
        }
        if(getLevel()  == 6){
            g.drawLine(170,143,170,185);
        }
        if(getLevel()  == 7){
            g.drawLine(170,160,150,150);
        }
        if(getLevel()  == 8){
            g.drawLine(170,160,190,150);
        }
        if(getLevel()  == 9){
            g.drawLine(170,185,155,198);
        }
        if(getLevel()  == 10){
            g.drawLine(170,185,186,199);
        }

    }

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

    public int getLevel(){
        return level;
    }
}

und jetzt die restlichen Teile (MVC)

testPanel

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

public class testPanel extends HangmanGraphic {
	
	private Button test,addtest;
	private Panel p1,p2;
	//private HangmanGraphic hg = new HangmanGraphic();
	private ArrayList <String> g = new ArrayList <String>();
	public testPanel(){
		test = new Button("Test");
		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(test);
		p2.add(addtest);
		
		ActionHandler h = new ActionHandler();
		
		test.addActionListener(h);
		addtest.addActionListener(h);
		
		
	}
	private class ActionHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e){
        	if(e.getSource()==addtest){
        		g.add(0,"haha");
        		setLevel(g.size());
        		repaint();
        	}
        }
    }
}

und die GUI

Java:
public class testGUI extends JFrame
{
    public static void main(String[]args){
        new testGUI();
    }

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

z.I. die ArrayList in dem Panel simuliert sozusagen meine Liste falscher Wörter.
Alles lässt sich kompilieren und ausführen , das Level wird gesetzt, doch es wird nichts gezeichnet.

irgendwelche Ideen ?

greez A0D0S0
 
Niemals AWT und Swing Komponenten mischen, evtl. löst das dein Problem schon.

EDIT:
ehm... Warum erbt testpanel von HangmanGraphic?
Du hast damit im endeffekt 2 "Instanzen" von HangsamGraphic. Den level setzt du auf der Instanz die nicht angezeigt wird.
Das Vererben ist hier völlig unnötig.
 
Zuletzt bearbeitet von einem Moderator:
Code:
private Panel p1,p2;
Panel ist eine AWT Komponente. Aber dein Problem liegt in der Vererbung von HangmanGraphic.
 

Neue Themen


Zurück
Oben