/ / Java Swing dessine des objets par-dessus d’autres composants

Java swing dessine des objets sur d'autres composants - java, swing, jpanel, paintcomponent

J'essaie de faire un petit programme de peinture. Je dessine des objets sur un JPanel qui est au sommet de JFrame (J'utilise Netbeans 6.9). J'ai quelques fonctionnalités de base telles que font, line et fillRectangle. J'utilise la méthode standard pour dessiner qui consiste à remplacer paintComponent().

class .... extends JPanel
{
@Override
void paintComponents(Graphics g)
{
.......
}
}

Le problème est que quand je dessine un texte, ligne dessusune région alors il est dessiné derrière elle plutôt que sur elle. En gros, je veux dessiner des objets par-dessus tous les autres objets qui ont déjà été dessinés sur le JPanel. Je ne veux vraiment pas passer à d'autres types de volets superposés. Une méthode très naïve consiste à défaire tous les objets et à les peindre dans l’ordre inverse (le dernier en premier).

Réponses:

6 pour la réponse № 1

Vous aurez besoin de remplacer paintComponent(Graphics g) et n'oubliez pas d'appeler super.paintComponent(Graphics g);

class .... extends JPanel
{
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);//honor paintComponent an call super to draw other components that were added to the JPanel
.......
}
}

Vous devrez peut-être aussi remplacer getPreferredSize(..) de JPanel et renvoyer une taille appropriée de sorte que le JPanel sera visible:

class .... extends JPanel
{
@Override
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
}

MODIFIER:

Selon ce que vous faites, vous voudrez peut-être aussi jeter un coup d’œil sur GlassPane qui vous permettra de définir un volet transparent sur l'ensemble JFrame fenêtre et peut aussi être peint, ce qui fera que les graphiques seront dessinés au-dessus de tous les autres, comme ceci:

entrer la description de l'image ici