F
fh-Frankfurt
Gast
Hi alle zusammen. Ich muss für das 3. Semester ein Spiel programmieren. Das Spiel heisst Set! Und dabei hab ich folgendes Problem(es wäre unangebracht mein Programm hier zu posten, da dies zu Unübersichtlichkeit führt.Daher hab ich ein Miniprogramm geschrieben, damit ich mein Problem besser schildern kann):
Das Miniprogramm besteht aus 3 Klassen: Hauptfenster (zur Darstellung eines Tisches), Main, und Bild(zum Zeichnen einer Karte)
Das Programm zeigt 2 button an. Ich möchte folgendes: Wenn man auf das Button "Ova"l klickt, dann soll das programm ein Oval zeichnen, dasselbe gilt für Button Rechteck. D.h jedes mal wenn ich auf ein Button klicke, dann soll das Programm immer wieder neuzeichnen.In der Zeile 46, 52 hab ich die repaint()-funktion aufgerufen... aber es funktioniert irgendwie nicht.. kann mir bitte bitte jemanden helfen?
Das Miniprogramm besteht aus 3 Klassen: Hauptfenster (zur Darstellung eines Tisches), Main, und Bild(zum Zeichnen einer Karte)
Code:
//---------------------------------------------------------------------------------HauptFenster
package test;
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.*;
public class HauptFenster extends JFrame implements ActionListener{
//Buttons anlegen
JButton buttonOval = new JButton("Oval");
JButton buttonRechteck = new JButton("Rechteck");
JPanel pMitte = new JPanel();
Bild bild;
public HauptFenster()
{
super();
this.setTitle("Test");
this.setLayout(null);
Container spielTisch=getContentPane();;
//2 Buttons erzeugen und zum Fenster adden
buttonOval.setBounds(new Rectangle(230, 250, 110, 25));
buttonRechteck.setBounds(new Rectangle(430, 250, 110, 25));
this.getContentPane().add(buttonRechteck, null);
this.getContentPane().add(buttonOval, null);
//Mittleren Panel positionieren und zum spielTisch adden
pMitte.setBounds(200,20,200,110);
pMitte.setLayout(null);
this.add(pMitte);
//Macht das Fenster zu
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Ereignisbehandlung
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if(label.equals("Oval"))//Falls man Button Oval drückt
{
bild=new Bild(1);
bild.repaint();
pMitte.add(bild);
}
else if(label.equals("Rechteck"))//Falls man Button rechteck drückt
{
bild=new Bild(2);
bild.repaint();
pMitte.add(bild);
}
}//actionPerformed
}
//--------------------------------------------------------------------------------------------Main
package test;
public class Main {
public Main() {
HauptFenster fenster = new HauptFenster();
fenster.setSize(600, 400);
fenster.setVisible(true);
}//Konstruktor
public static void main(String[] args) { new Main(); }
}
//----------------------------------------------------------------------------------------------Bild
package test;
import javax.swing.*;
import java.awt.*;
public class Bild extends JPanel{
int figura;
public Bild(int figur)
{
figura=figur;
this.setBackground(Color.green);
this.setBounds(0,0,90,110);
}//Ende vom Konstruktor
//Funktion für das Zeichnen der Karte
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(Color.red);
if(figura==1)//Malt das Oval
g2d.drawOval(getWidth()/2-50/2, getHeight()/2-20/2, 50, 20);
else if(figura==2)//Malt den Rechteck
g2d.drawRect(getWidth()/2-50/2, getHeight()/2-16/2, 50, 16);
}
}
Das Programm zeigt 2 button an. Ich möchte folgendes: Wenn man auf das Button "Ova"l klickt, dann soll das programm ein Oval zeichnen, dasselbe gilt für Button Rechteck. D.h jedes mal wenn ich auf ein Button klicke, dann soll das Programm immer wieder neuzeichnen.In der Zeile 46, 52 hab ich die repaint()-funktion aufgerufen... aber es funktioniert irgendwie nicht.. kann mir bitte bitte jemanden helfen?