Wie zu malen eine Rasterlinie als hintergrund auf JPanel
Habe ich ein problem. Ich verwendete Gridbaglayout in meinem JFrame. Eine der Komponente ist JPanel.
Wollte ich zeichnen Sie eine Rasterlinie als hintergrund für mein JPanel. e.g in der folgenden Programm, es soll zu produzieren 3 vertikale und 3 horizontale Linien, allerdings zeigt es nur 2 vertikale und 2 horizontale Linie. die Letzte Zeile war nicht zu sehen.
Ein weiteres problem war, dass, es scheint, dass die Größe des JPanel größer war, dass das, was ich eingestellt habe. Ich bemerkte, dass diese durch die Länge der Linie, die kürzer ist, dass das JPanel weißen hintergrund.
public class drawLayout extends JComponent
{
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
public int getY() {
return 0;
}
public int getX() {
return 0;
}
@Override public void paintComponent(Graphics g)
{
g.setPaint(Color.GRAY);
for (int i = 0; i <= getSize().width; i += 300)
{
g2.drawLine(i, 0, i, getSize().height);
}
for (int i = 0; i <= getSize().height; i += 300)
{
g2.drawLine(0,i, getSize().width, i);
}
}
}
EDIT:
http://www.freeimagehosting.net/image.php?1af16edc28.jpg
Das erste problem gelöst (die Gitternetzlinien gezeigt wurden, die auf JPanel).
Das andere problem war mir ein Rätsel. Wie Sie sehen können auf dem Bild im Anhang, die Größe des JPanel zu sein scheint, mehr als 600 beim Blick auf die Länge des Gitters (markiert als rote box). Wie kann ich dies lösen, so dass die Rasterlinie aus, der hintergrund schön Aussehen, ohne zusätzliche weiße Fläche außerhalb der Rasterlinie?
- Bitte siehe mein update.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr JPanel die Größe ist 600, dann die verfügbaren Koordinaten gehen nur von 0 bis 599. Die Linie 600 ist nicht gezeichnet werden.
Auch alle Ränder und/oder Abstände würde eine weitere Verringerung der verfügbaren Speicherplatz.
Update: ich etwas Zeit hatte, also schrieb ich Ihre Anwendung. Hoffentlich finden Sie einige nützliche Hinweise.
Einige details:
paintComponents()
aufrufen nichtsuper.paintComponents()
. Es sollten!Du die Inkrementierung von i-300. Nach zwei itterations ich, ist 600, und Sie beenden die for-Schleife.
Versuchen Sie, Ihren Dimensionen 601 oder Inkrement, 299. Sie können auch verwenden, width+1, Height+1 in Ihrem Vergleich.