Peinture de fond de Composite
Comment puis-je savoir la méthode de peinture pour dessiner arrière-plan sur un Composite uniquement, et non sur l'ensemble de la JFrame.
Ma JFrame taille est plus grande que le Composite. Lorsque je tente de peindre une grille d'arrière-plan pour le Composite, la grille semble être peint partout dans la JFrame au lieu de simplement le Composite.
Ici des parties de code:
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)
}
Je vous ai donné la bonne réponse, mais vous ne l'acceptez pas. Bon à savoir pour l'avenir.
OriginalL'auteur Jessy | 2010-01-01
Vous devez vous connecter pour publier un commentaire.
camickr est correct. Donc:
Vous avez besoin de séparer strictement votre dessin à partir de composants différents. Swing est déjà
la gestion des sous-composants, donc il n'y a absolument pas besoin de mettre en œuvre des dessins dans votre
Panneau dans le Cadre de (l'appel de paintComponents() est une grave erreur).
Et vous ne devriez jamais ignorer paint(), parce que seuls paintComponent()
est utilisé dans les Swing. Ne pas mélanger les deux jusqu'à ce que vous devez absolument savoir ce que vous faites.
OriginalL'auteur Thorsten S.
Si vous voulez faire de la peinture sur le Composite ensuite remplacer le Composite, pas la JFrame.
Vous devez écraser le paintComponent() la méthode de Composite. Lire l'article de la Balançoire tutoriel sur la La Peinture Custom pour un exemple.
OriginalL'auteur camickr
Je dirais que votre premier point de l'enquête.
OriginalL'auteur Pool
Le code que vous avez posté n'est pas complet, il manque comment le groupe s'est ajouté à la JFrame et qui LayoutManager est utilisé.
Le code coutures pour être correct. Êtes-vous sûr que le Composite n'est pas l'occupation de l'ensemble de la JFrame? Ajouter un
System.out.println(drawingPanel.getSize())
pour vérifier cela.Si vous utilisez le BorderLayout, la valeur par défaut pour JFrame, et a juste ajouté le panneau sans aucune contrainte, le panneau sera utiliser l'ensemble de la zone. Le PreferredSize est ignoré.
Essayez, juste pour le test:
mais IMO c'est pas le meilleur ou corriger façon de le faire. Je préfère remplacer le
paintComponent()
méthode du Composite, comme suggéré par Thorsten et camickr.Mais il continue à utiliser l'ensemble du domaine de la JFrame jusqu'à ce qu'un Composant est ajouté à la JFrame ou le LayoutManager changé.
OriginalL'auteur Carlos Heuberger
Vous devez remplacer le Composite, pas la JFrame faire de la peinture. Vous pouvez remplacer le paintComponent() la méthode de la Composite
OriginalL'auteur CuriosMan