Zeichnung mehr als ein Rechteck mit Java (awt)
Hier ist mein code:
class Ramka extends JFrame
{
public static final int SZEROKOSC = 800;
public static final int WYSOKOSC = 600;
Container powZawartosci = getContentPane();
public Ramka()
{
setSize(SZEROKOSC, WYSOKOSC);
setTitle("Siatka bryły by Paweł Mysior");
}
public void addRectangle(int startX, int startY, int sizeX)
{
drawRectangle rect = new drawRectangle(startX, startY, sizeX);
powZawartosci.add(rect);
}
class drawRectangle extends JPanel
{
private int a, startX, startY;
public drawRectangle(int startX, int startY, int a) //square
{
this.a = a;
this.startX = startX;
this.startY = startY;
}
public void paintComponent(Graphics g)
{
Rectangle2D rect = new Rectangle2D.Double(startX, startY, a, a);
Graphics2D g1 = (Graphics2D) g;
g1.draw(rect);
}
}
public class Main
{
public static void main(String[] args)
{
Ramka ramka = new Ramka();
ramka.addRectangle(200, 200, 50);
ramka.addRectangle(100, 100, 100);
ramka.addRectangle(300, 300, 150);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
}
Was ich will, es zu tun ist, ziehen Sie drei Rechtecke (beiseite die Funktionalität und das Gefühl dies zu tun, ich bin einfach noch lernen).
Aber es zieht nur die letzten ein, beginnend bei 300 und 300. Ich weiß wirklich nicht verstehen, die paintComponent Sache...
Vielen Dank im Voraus für jede Hilfe,
Paul
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie sind das hinzufügen von drei
JPanel
s übereinander. Dies scheint wie eine seltsame Art und Weise zu zeichnen Rechtecke, aber mit diesem design, Sie benötigen, um einLayoutManager
.Check-out diese link, und versuchen zu lernen. Der code unten sollte den trick tun, obwohl.
In Ihrem
JPanel
- Derivat, können Sie verfolgen dieRectangle
s, die Sie benötigen, um zu zeichnen. Ich Schreibe den code unten auch ganz spontan, so überprüfen Sie für Fehler ersten.Das problem ist im Grunde, dass Sie über zwei verschiedene Ebenen der Abstraktion hier.
In der ersten, fügen Sie eine Komponente zu Ihrem JFrame, und das ist gut irgendwann.
Hinzufügen Ihre "DrawRectangle" Instanz, auf die gleiche Weise fügen Sie einen neuen button, ein label oder ein anderes panel. Das problem kommt, wenn Sie Komponenten hinzufügen, in der gleichen position. JFrame main panel ( Inhaltsbereich ) verwendet eine "Border" layout-manager, dass Orte, die Komponente in der Mitte, wenn Sie nicht hinzufügen jede Einschränkung.
So, diese Zeile:
Immer fügt die Komponente im "Zentrum", überschreiben die vorherigen. Das ist, warum Sie sah nur ein Rechteck.
Die zweite Ebene der Abstraktion verwendet, hier ist die Malerei der Komponente selbst. Das ist low-level, und Sie haben zu sagen, die Komponente, die zum zeichnen jeder Zeile und wo.
Das ist in Ordnung, aber wenn Sie möchten, zeichnen Sie mehrere Rechtecke in der gleichen Komponente, halten Sie die Referenzen für jeden ( mit einer Sammlung, wie in einer Liste ) und dann Durchlaufen, die Sammlung und ziehen Sie Sie alle.
Wie diese:
viele http://img40.imageshack.us/img40/8125/capturadepantalla201001nd.png
Nahm ich Ihren code, und es geändert, um zu reflektieren, was ich sage. Das Endergebnis, verwendet die gleichen Komponenten, aber diese Komponente wiederum zieht alle Rechtecke.
Beachten Sie auch die Benennungs - /Klammer Stil, aber ist nicht zwingend erforderlich, ist es üblich, während der Programmierung in Java