Hey Java-Forum-Gemeinschaft,
Mein Problem, dass ich habe, ist:
Wenn ich das Programm starte und zwei Kreise malen möchte, dann öffnen sich zwei Fenster. (Ich habe versucht, dass mittels Threads so zu ändern, dass das eine Fenster zeit versetzt geöffnet wird, das würde theoretisch klappen, nur wird leider der ganze Java-Thread gestoppt und der Nutzer kann keine Eingabe machen.)
Und wenn ich das eine Fenster ausgefüllt habe, mit den Daten, dann öffnet sich ein neues Fenster, in dem der Kreis gemalt wird. Nun fülle ich das zweite Fenster aus und es öffnet sich ein zweites Fenster, was ja klar ist, denn ich instanziere die Klasse ja noch mal, kann ich aber irgendwie, auf das selbe Objekt noch mal zugreifen, sodass aber das vorherige Oval nicht überschrieben wird?
Ich hoffe, ihr könnt mir helfen.
Vielen Dank schonmal im voraus
Lg James.
Code:
Klasse Startup:
Klasse Kreis:
Klasse Paint:
Mein Problem, dass ich habe, ist:
Wenn ich das Programm starte und zwei Kreise malen möchte, dann öffnen sich zwei Fenster. (Ich habe versucht, dass mittels Threads so zu ändern, dass das eine Fenster zeit versetzt geöffnet wird, das würde theoretisch klappen, nur wird leider der ganze Java-Thread gestoppt und der Nutzer kann keine Eingabe machen.)
Und wenn ich das eine Fenster ausgefüllt habe, mit den Daten, dann öffnet sich ein neues Fenster, in dem der Kreis gemalt wird. Nun fülle ich das zweite Fenster aus und es öffnet sich ein zweites Fenster, was ja klar ist, denn ich instanziere die Klasse ja noch mal, kann ich aber irgendwie, auf das selbe Objekt noch mal zugreifen, sodass aber das vorherige Oval nicht überschrieben wird?
Ich hoffe, ihr könnt mir helfen.
Vielen Dank schonmal im voraus
Lg James.
Code:
Klasse Startup:
Java:
package basics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Startup
extends JFrame
implements ActionListener
{
Kreis[] k;
Kreis parent;
Thread warten;
Thread kreis;
JFrame frame;
Paint zeichnen;
JLabel label;
JTextField anzahl;
JButton enter;
JButton exit;
int anz;
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
new Startup();
}
public Startup()
{
// parent.x = getX();
// zeichnen = new Paint(x, y, d, fill);
// warten = new Thread();
// kreis = new Thread();
frame = new JFrame();
label = new JLabel();
anzahl = new JTextField();
enter = new JButton();
exit = new JButton();
enter.setText("Abschicken");
exit.setText("Beenden");
enter.setPreferredSize(new Dimension(120,25));
exit.setPreferredSize(new Dimension( 120,25));
enter.addActionListener(this);
exit.addActionListener(this);
anzahl.setPreferredSize(new Dimension(25,20));
label.setPreferredSize(new Dimension(225,20));
label.setText("Bitte die gewünschte Anzahl angeben:");
frame.setSize(350,120);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 10,10));
frame.add(label);
frame.add(anzahl);
frame.add(enter);
frame.add(exit);
frame.setVisible(true);
}
/*
public void run()
{
new Kreis();
}
*/
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.red);
g.fillOval(5, 5, 50, 50);
}
@Override
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == enter)
{
frame.dispose();
anz = Integer.parseInt(anzahl.getText());
// System.out.println(anz);
for (int i = 0; i < anz; i++)
{
new Kreis(this);
// k[i] = new Kreis();
/*
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
System.out.print("Klappt nicht.");
}
*/
}
}
else if (ae.getSource() == exit)
{
System.exit(0);
}
}
}
Klasse Kreis:
Java:
package basics;
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.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Kreis
extends JFrame
implements ActionListener
{
Paint zeichnen;
Startup parent;
JLabel labPosX;
JLabel labPosY;
JLabel labDPixel;
JLabel labFilled;
JButton enter;
JButton exit;
JTextField posX;
JTextField posY;
JTextField dPixel;
JCheckBox filled;
public int x;
public int y;
public int d;
public boolean fill;
private static final long serialVersionUID = 1L;
public Kreis(Startup parent)
{
/*
int x = parent.x;
int y = parent.y;
int d = parent.d;
boolean fill = parent.fill;
*/
this.parent = parent;
abfrage();
}
public void abfrage()
{
labPosX = new JLabel();
labPosY = new JLabel();
labDPixel = new JLabel();
labFilled = new JLabel();
enter = new JButton();
exit = new JButton();
posX = new JTextField();
posY = new JTextField();
dPixel = new JTextField();
filled = new JCheckBox();
labFilled.setText("Kreis gefüllt? Ja/Nein.");
labPosX.setText("Position X. Bitte angeben.");
labPosY.setText("Position Y. Bitte angeben.");
labDPixel.setText("Durchmesser in Pixel.");
enter.setText("Generieren");
exit.setText("Beenden");
add(labFilled);
add(filled);
add(labPosX);
add(posX);
add(labPosY);
add(posY);
add(labDPixel);
add(dPixel);
add(enter);
add(exit);
posX.setPreferredSize(new Dimension(25, 25));
posY.setPreferredSize(new Dimension(25, 25));
dPixel.setPreferredSize(new Dimension(25, 25));
enter.setPreferredSize(new Dimension(100, 25));
exit.setPreferredSize(new Dimension(100, 25));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,400);
setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
setVisible(true);
enter.addActionListener(this);
exit.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == enter)
{
x = Integer.parseInt(posX.getText());
y = Integer.parseInt(posY.getText());
d = Integer.parseInt(dPixel.getText());
fill = filled.isSelected();
dispose();
new Paint(x, y, d, fill);
// if(fill)
// {
// new FillPaint(x,y,d);
// }
// else
// {
// new Paint(x,y,d);
// }
}
else if(ae.getSource() == exit)
{
dispose();
// System.exit(0);
}
}
}
Klasse Paint:
Java:
package basics;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Paint
extends JFrame
{
Kreis parent;
JPanel panel;
boolean fill;
int d = 0;
int x = 0;
int y = 0;
private static final long serialVersionUID = 1L;
public Paint(int x, int y, int d, boolean fill)
{
this.x = x;
this.y = y;
this.d = d;
this.fill = fill;
/*
* System.out.println(x);
* System.out.println(y);
* System.out.println(d);
*/
panel = new JPanel();
setSize(450,450);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.white);
g.fillRect(0, 0, 450, 450);
g.setColor(Color.black);
if(!fill)
{
g.drawOval(x, y, d, d);
}
else
{
g.fillOval(x, y, d, d);
}
}
}