Hallo
ich will wie der Name es schon erahnen lässt eine mit Graphics2D produzierte Graphik auf einem JPanel platzieren, das anschliessend logischerweise in einem JFrame liegen soll.
Hier erstmal mein Code, sollte so lauffähig sein:
So, führt man dieses Programm aus dann hat man ein einfaches Fenster mit 6 Kreisen mit jeweils eine Zahl in der Mitte.
Mein Problem bezieht sich auf folgende Zeile
[JAVA=26]
mainWindow.add(new LottoPanel(50,list));
[/code]
Hier werden die Zahlen übergeben und die Kreise erzeugt. Das erste Argument an LottoPanel gibt die vertikale Position der Kreise.
So und hier ist genau mein Problem: ich will nun zB ein weiterer LottoPanel zum JFrame hinzufügen aber mit eine anderen y-Koordinate.
Wenn ich aber einfach eine neue Zeile hizufüge mit der geänderten Koordinate dann werden die Kreise nur einmal geplottet und nicht wie ich es will zwei mal, also zwei Zeilen mit jeweils 6 Kreise.
Wo liegt hier mein Fehler??
Muss ich hier evtl mit Layouts arbeiten?
Danke im Vorraus
Migu
ich will wie der Name es schon erahnen lässt eine mit Graphics2D produzierte Graphik auf einem JPanel platzieren, das anschliessend logischerweise in einem JFrame liegen soll.
Hier erstmal mein Code, sollte so lauffähig sein:
Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestApp {
public static void main(String[] args) {
JFrame mainWindow = new JFrame("Main Window");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setSize(800, 300);
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("6");
list.add("10");
list.add("20");
list.add("25");
list.add("42");
mainWindow.add(new LottoPanel(50,list));
mainWindow.setVisible(true);
}
}
class Circle {
private int x;
private int y;
private int sizeOuter = 70;
private int sizeInner = 50;
private String number;
public Circle (final int x, final int y, final String number) {
this.x = x;
this.y = y;
this.number = number;
}
protected void paintCircle(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black);
g2.setStroke(new BasicStroke(8));
g2.drawOval(this.x, this.y, sizeOuter, sizeOuter);
g2.setColor(Color.red);
g2.fillOval(this.x, this.y, sizeOuter, sizeOuter);
g2.setPaint(Color.black);
g2.setStroke(new BasicStroke(2));
g2.drawOval(this.x+10, this.y+10, sizeInner, sizeInner);
g2.setColor(Color.white);
g2.fillOval(this.x+10, this.y+10, sizeInner, sizeInner);
g2.setColor(Color.black);
Font f = new Font(Font.SERIF, Font.PLAIN, 24);
g2.setFont(f);
if (this.number.length() == 1) {
g2.drawString(this.number,this.x+27, this.y+45);
}
else {
g2.drawString(this.number,this.x+20, this.y+45);
}
}
}
class LottoPanel extends JPanel {
private int y;
private ArrayList<String> numbers;
public LottoPanel(final int y, final ArrayList<String> numbers) {
this.y = y;
this.numbers = numbers;
}
@Override
public void paintComponent(Graphics g) {
// background rectangle
g.setColor(Color.white);
g.fillRect(40, 40, 590, 90);
g.setColor(Color.black);
g.drawRect(40, 40, 590, 90);
// draw numbers
int x = 50;
for(String number : this.numbers) {
Circle circle = new Circle(x, this.y, number);
circle.paintCircle(g);
x += 100;
}
}
}
So, führt man dieses Programm aus dann hat man ein einfaches Fenster mit 6 Kreisen mit jeweils eine Zahl in der Mitte.
Mein Problem bezieht sich auf folgende Zeile
[JAVA=26]
mainWindow.add(new LottoPanel(50,list));
[/code]
Hier werden die Zahlen übergeben und die Kreise erzeugt. Das erste Argument an LottoPanel gibt die vertikale Position der Kreise.
So und hier ist genau mein Problem: ich will nun zB ein weiterer LottoPanel zum JFrame hinzufügen aber mit eine anderen y-Koordinate.
Wenn ich aber einfach eine neue Zeile hizufüge mit der geänderten Koordinate dann werden die Kreise nur einmal geplottet und nicht wie ich es will zwei mal, also zwei Zeilen mit jeweils 6 Kreise.
Wo liegt hier mein Fehler??
Muss ich hier evtl mit Layouts arbeiten?
Danke im Vorraus
Migu
Zuletzt bearbeitet: