Y at-il un truc pour appeler JFrame.setGlassPane(Component)
plus d'une fois? Dans le code ci-dessous, je l'appelle d'abord pour créer une boîte rouge dans la vitre. Cela fonctionne bien. Puis, dans un gestionnaire de clic de souris, je l'appelle à nouveau pour créer une boîte bleue dans un nouveau volet en verre. Cela ne fonctionne pas. La vitre rouge d'origine disparaît, mais la vitre bleue n'apparaît pas. Qu'est-ce que je fais mal ici?Appeler JFrame.setGlassPane (Component) plusieurs fois
public class GlassPaneProblem extends Component {
private BufferedImage img;
private JFrame f;
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public GlassPaneProblem() {
try {
img = ImageIO.read(new File("images/AppleCorps.JPG"));
} catch (IOException e) {
}
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
BlueGlassPane blueGlassPane = new BlueGlassPane();
setTheGlassPane(blueGlassPane);
}
});
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100, 100);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
public void run() {
f = new JFrame("Glass Pane Problem");
f.add(this);
f.pack();
RedGlassPane redGlassPane = new RedGlassPane();
setTheGlassPane(redGlassPane);
f.setVisible(true);
}
void setTheGlassPane(JComponent glassPane) {
f.setGlassPane(glassPane);
f.getGlassPane().setVisible(true);
}
public static void main(String[] args) {
GlassPaneProblem glassPaneProblem = new GlassPaneProblem();
glassPaneProblem.run();
}
}
class RedGlassPane extends JComponent {
protected void paintComponent(Graphics g) {
Rectangle clip = g.getClipBounds();
g.setColor(Color.RED);
g.fillRect(clip.x + clip.width/3, clip.y + clip.height/3,
clip.width/3, clip.height/3);
}
}
class BlueGlassPane extends JComponent {
protected void paintComponent(Graphics g) {
Rectangle clip = g.getClipBounds();
g.setColor(Color.BLUE);
g.fillRect(clip.x + clip.width/3, clip.y + clip.height/3,
clip.width/3, clip.height/3);
}
}
Appel repaint()
comme cela ne résout pas le problème:
void setTheGlassPane(JComponent glassPane) {
f.setGlassPane(glassPane);
f.getGlassPane().setVisible(true);
f.repaint();
}
avez-vous essayez d'appeler manuellement valider ou de repeindre sur le composant? – clamp
Wow, validez() travaillé! Merci! (Repaint() n'a pas fonctionné pour ce que ça vaut.) –