Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich versuche mittels einem JButton ein Rechteck auf ein JPanel zu zeichnen.
Hier der Code vom Menu mit dem Button:
Java:
public class Klasse1 extends JPanel implements ActionListener{
private JButton button1 = new JButton("Beschriftung xxx");
Klasse2 klasse2 = new Klasse2();
Klasse3 klasse3;
public Menu(){
setLayout(null);
add(button1);
button1.setBounds(0,10,90,30);
button1.setVisible(true);
button1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
klasse3 = new Klasse3(1,10);
}
}
Hier meine Klasse2 in der ich etwas zeiche, aber noch nicht das Rechteck:
Java:
public class Klasse2 extends JPanel {
public Klasse2(){
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(0, 0, 0, 500);
}
}
und hier meine Klasse in der das Rechteck gezeichnet werden soll:
Java:
public class Klasse3 extends Klasse2{
int x,y;
public Klasse3(int x, int y){
System.out.println("ABC");
this.x = x;
this.y = y;
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(x, y, 10, 10);
}
}
Fehlermeldung beim klicken auf den Button kommt keine.
Klasse3 wird auch aufgerufen (ich bekomme die sysout Meldung "ABC"), aber es wird nichts gezeichnet.
Ohje, nein habe ich nicht gemacht.
Was ein blöder Fehler... alles klar..
Gibt es eine schönere Lösung damit ich das nicht machen muss?
Kann ich das graphics g aus Klasse2 irgendwie in Klasse3 nutzen?
Hintergrund ist der, das ich als nächstes mehrere Objekte von Klasse3 erstellen will und nicht alle einzeln dem JFrame zuordnen will.
Der Übersicht halber will ich es aber auch nicht alles in der Klasse2 machen.
Mein Ziel ist eigentlich das ich beim klicken auf den Button etwas auf ein JPanel gezeichnet werden soll.
Da ich aber später mehrere Knöpfe für verschiedene Formen/Grafikobjekte haben will möchte ich nicht alles in eine Klasse schreiben. Gleichzeitig will ich aber alles auf einem JPanel haben.
Ähm, das Graphics aus nem paintComponent sollte man sich auf keinen Fall irgendwie zwischenspeichern um dann von irgendwo anders darauf rumzumalen...
@TO:
Du kannst das ganze schon in unterschiedliche Klassen auslagern. Aber du musst IMMER mit dem Graphics aus paintComponent() malen.
Folgendes könntest du machen:
Java:
public class DrawPanel extends JPanel {
private List<Klasse> klassen;
[...]
public void paintComponent(Graphics g) {
for (Klasse k : klassen) {
k.paintComponent(g);
}
}
}
Das DrawPanel ist damit ein Container für alle Formen/Klassen die du zeichnen willst.