Hey,
ich bin neu in diesem Forum. Ich hoffe, dass ich hier soweit alles richtig mache wenn nicht bitte gleich drauf hinweisen.
Ich habe folgendes Proble: Ich versuche ein Programm zu schreiben mit dem man auf Knopfdruck immer neue Rechtecke erstellen kann, ohne das die alten immer wieder ueberschrieben werden, was derzeit bei meinem Programm der fall ist.
[JAVA=42]
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Gui {
static JPanel panel;
// private static JPanel panel2;
JButton button;
JComponent affe;
MyPanel myPanel = new MyPanel();
public Gui() {
JFrame frame = new JFrame("Uebung");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.setVisible(true);
button = new JButton("Daten anzeigen");
frame.getContentPane().add(button);
panel = new JPanel();
panel.setPreferredSize(new Dimension(300,300));
panel.setBackground(new Color(200,200,255));
JLabel label = new JLabel("Diagramm");
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
panel.add(label);
frame.getContentPane().add(panel);
panel.add(myPanel);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button.setForeground(new Color(0,200,0));
myPanel.setPreferredSize(new Dimension(300, 300));
panel.add(myPanel);
panel.repaint();
panel.validate();
}
});
frame.pack();
}
public static void main(String[] args) {
new Gui();
}
}
[/code]
und mein Rechteck erstelle ich hier
[JAVA=42]
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JComponent {
private static final long serialVersionUID = 1L;
int a = (int)(Math.random());
public void paintComponent(Graphics g) {
//super.paintComponent(g);
g.setColor(new Color(100,100,155));
int i = (int)(Math.random()*100+1);
int h = (int)(Math.random()*100+1);
int j = (int)(Math.random()*100+1);
int k = (int)(Math.random()*100+1);
g.fillRect(i, h, j, k);
}
}
[/code]
Ich glaube das repaint das panel immer wieder ueberschreibt. habe auch schon einiges getestet aber ohne erfolg. Vielleicht hat jemand eine Idee. Schonma danke fuer die Antworten.
ich bin neu in diesem Forum. Ich hoffe, dass ich hier soweit alles richtig mache wenn nicht bitte gleich drauf hinweisen.
Ich habe folgendes Proble: Ich versuche ein Programm zu schreiben mit dem man auf Knopfdruck immer neue Rechtecke erstellen kann, ohne das die alten immer wieder ueberschrieben werden, was derzeit bei meinem Programm der fall ist.
[JAVA=42]
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Gui {
static JPanel panel;
// private static JPanel panel2;
JButton button;
JComponent affe;
MyPanel myPanel = new MyPanel();
public Gui() {
JFrame frame = new JFrame("Uebung");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.setVisible(true);
button = new JButton("Daten anzeigen");
frame.getContentPane().add(button);
panel = new JPanel();
panel.setPreferredSize(new Dimension(300,300));
panel.setBackground(new Color(200,200,255));
JLabel label = new JLabel("Diagramm");
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
panel.add(label);
frame.getContentPane().add(panel);
panel.add(myPanel);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button.setForeground(new Color(0,200,0));
myPanel.setPreferredSize(new Dimension(300, 300));
panel.add(myPanel);
panel.repaint();
panel.validate();
}
});
frame.pack();
}
public static void main(String[] args) {
new Gui();
}
}
[/code]
und mein Rechteck erstelle ich hier
[JAVA=42]
import java.awt.*;
import javax.swing.*;
public class MyPanel extends JComponent {
private static final long serialVersionUID = 1L;
int a = (int)(Math.random());
public void paintComponent(Graphics g) {
//super.paintComponent(g);
g.setColor(new Color(100,100,155));
int i = (int)(Math.random()*100+1);
int h = (int)(Math.random()*100+1);
int j = (int)(Math.random()*100+1);
int k = (int)(Math.random()*100+1);
g.fillRect(i, h, j, k);
}
}
[/code]
Ich glaube das repaint das panel immer wieder ueberschreibt. habe auch schon einiges getestet aber ohne erfolg. Vielleicht hat jemand eine Idee. Schonma danke fuer die Antworten.