Hallo Experten,
In dem unten gelisteten Programm (das ich hier auf's Wesentliche abgemagert habe) geht es darum, drei Graphiken in einem Frame zu vereinigen :
1. Eine Simulation "Brett" (Hasen, die Gras fressen)
2. Eine Graphik "Population", die die Anzahl der Hasen im Laufe der Zeit darstellt
3. und eine Benutzeroberfläche "Benutzer"
Alle drei Graphiken sind in je einer Klasse JPanel-Klasse enthalten.
Außerdem gibt es eine main-Klasse "Hasen" und einen "Manager".
Problem : Das "Brett" und die "Population" werden je zwei Mal gezeichnet, und zwar in die beiden Hälften des "Panels" mit GridLayout (2,1).
Kann mir jemand sagen, warum ?
In dem unten gelisteten Programm (das ich hier auf's Wesentliche abgemagert habe) geht es darum, drei Graphiken in einem Frame zu vereinigen :
1. Eine Simulation "Brett" (Hasen, die Gras fressen)
2. Eine Graphik "Population", die die Anzahl der Hasen im Laufe der Zeit darstellt
3. und eine Benutzeroberfläche "Benutzer"
Alle drei Graphiken sind in je einer Klasse JPanel-Klasse enthalten.
Außerdem gibt es eine main-Klasse "Hasen" und einen "Manager".
Problem : Das "Brett" und die "Population" werden je zwei Mal gezeichnet, und zwar in die beiden Hälften des "Panels" mit GridLayout (2,1).
Kann mir jemand sagen, warum ?
Code:
import javax.swing.*;
import java.awt.*;
public class Hasen extends JFrame
{
Manager manager;
Brett brett;
Population pop;
Benutzer gui;
int msec = 100;
Panel panel;
Container container;
public Hasen()
{
this.setSize(1000, 650);
brett = new Brett();
container = getContentPane();
pop = new Population();
gui = new Benutzer();
manager = new Manager(brett, pop, msec);
setBackground(Color.yellow);
panel = new Panel();
panel.setLayout(new GridLayout(2, 1));
panel.add(brett);
panel.add(pop);
container.add("Center", panel);
container.add("East", gui);
manager.start();
}
public static void main(String[] args)
{
Hasen hasen = new Hasen();
hasen.setVisible(true);
}
}
class Manager implements Runnable
{
Brett brett;
Population pop;
Thread running;
int msec;
public Manager (Brett brett, Population pop, int msec)
{
this.brett = brett;
this.pop = pop;
this.msec = msec;
}
public void start()
{ if (running == null)
{ running = new Thread (this);
running.start();
} }
public void run()
{
int i=0;
while(i<4)
{
i++;
brett.malen();
pop.malen();
verzoegerung (msec);
}
}
public void verzoegerung (int msec)
{
try {Thread.sleep (msec);}
catch(Exception e){}
}
}
class Brett extends JPanel
{
public void malen()
{
repaint();
}
public void paint(Graphics g)
{
g.setColor(Color.pink);
g.fillRect(100, 100, 300, 200);
}
}
class Population extends JPanel
{
public void malen()
{
repaint();
}
public void paint(Graphics g)
{
g.setColor(Color.green);
g.fillRect(0, 20, 500, 100);
}
}
class Benutzer extends JPanel
{
JSlider slider1;
JButton bStart;
JLabel label;
public Benutzer()
{
setLayout(new GridLayout(0, 1));
label = new JLabel(" Benutzeroberfläche");
bStart = new JButton("S T A R T");
slider1 = new JSlider(JSlider.HORIZONTAL, 0, 4, 1);
add(label);
add(slider1);
add(bStart);
}
}