Farbe hintergrund von JPanel
Wie kann ich die paint-Methode zum zeichnen von hintergrund auf JPanel und nicht nur auf den gesamten JFrame.
Meine JFrame-Größe ist größer als die JPanel. Wenn ich versuche zu malen, ein raster hintergrund für das JPanel, das raster scheint lackiert zu werden alle über das JFrame anstatt nur das JPanel.
Hier Teile des Codes:
public class Drawing extends JFrame {
JPanel drawingPanel;
...........
public Drawing (){
drawingPanel = new JPanel();
drawingPanel.setPreferredSize(new Dimension(600,600));
}
public void paint(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
paintBackground(g2); //call a METHOD to paint the for JPANEL
}
private void paintBackground(Graphics2D g2)
{
g2.setPaint(Color.GRAY);
for (int i = 0; i < drawingPanel.getSize().width; i += 300)
{
Shape line = new Line2D.Float(i, 0, i, drawingPanel.getSize().height);
g2.draw(line);
}
for (int i = 0; i < drawingPanel.getSize().height; i += 300)
{
Shape line = new Line2D.Float(0, i, drawingPanel.getSize().width, i);
g2.draw(line);
}
} //END private void paintBackground(Graphics2D g2)
}
Ich gab Ihnen die richtige Antwort, aber Sie akzeptieren es nicht. Gut zu wissen für die Zukunft.
InformationsquelleAutor Jessy | 2010-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
camickr korrekt ist. Also:
Müssen Sie strikt trennen Sie Ihre Zeichnung aus verschiedenen Komponenten. Schaukel ist bereits
die Verwaltung der Teilkomponenten, so gibt es absolut keine Notwendigkeit zu implementieren, die Zeichnungen in Ihrem
Panel im Rahmen der (Aufruf paintComponents() ist ein schwerer Fehler).
Und Sie sollten nie überschreiben von paint(), weil nur paintComponent()
verwendet in Schwung. Mischen Sie nicht, bis Sie absolut wissen, was Sie tun.
InformationsquelleAutor Thorsten S.
Wenn Sie wollen, um die Malerei auf dem JPanel überschreiben dann die JPanel, nicht der JFrame.
Sollten Sie das überschreiben der paintComponent () - Methode von JPanel. Lesen Sie den Abschnitt, aus dem Swing-tutorial auf Custom Painting für ein Beispiel.
InformationsquelleAutor camickr
Ich würde vorschlagen, als ersten Punkt der Untersuchung.
InformationsquelleAutor Pool
Den code, den Sie geschrieben ist nicht vollständig, es fehlt, wie die Platte wird Hinzugefügt, um den JFrame und welcher LayoutManager verwendet wird.
Der code Nähte zu korrigieren. Sind Sie sicher, dass das JPanel wird nicht besetzt, die ganze JFrame? Hinzufügen eines
System.out.println(drawingPanel.getSize())
um dies zu überprüfen.Wenn Sie das BorderLayout, der Standard für JFrame, und hat soeben das Bedienfeld ohne jede Einschränkung, das panel wird verwenden Sie die ganze Fläche. Die PreferredSize ignoriert.
Versuchen Sie, diese, nur zum testen:
aber IMO ist dies nicht die beste oder richtige Weg, es zu tun. Ich würde es vorziehen, zu überschreiben
paintComponent()
Methode vom JPanel, wie vorgeschlagen von Thorsten und camickr.Aber es wird weiterhin der gesamte Bereich der JFrame, bis andere Komponente Hinzugefügt wird, um den JFrame oder die LayoutManager geändert.
InformationsquelleAutor Carlos Heuberger
Sollten Sie überschreiben die JPanel, nicht das JFrame zu tun Malerei. Sie können das überschreiben der paintComponent () - Methode des JPanel
InformationsquelleAutor CuriosMan