Duplicata possible:
Problème Java GUI repeindre ()?
J'écris un Java code, mais j'ai un problème avec le problème de l'interface graphique. Lorsque j'ajoute un composant dans un objet JFrame, j'appelle la méthode repaint () afin de mettre à jour l'interface graphique, mais cela ne fonctionne pas) Mais quand je minimise ou redimensionne ce cadre, l'interface graphique est mise à jour.
Voici mon code:
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(460, 500);
frame.setTitle("Circles generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
String input = JOptionPane.showInputDialog("Enter n:");
int n = Integer.parseInt(input);
CircleComponent component = new CircleComponent(n);
frame.add(component);
component.repaint();
}
Si vous avez ajouté JComponent
à un conteneur déjà visible, vous devez appeler
frame.getContentPane().validate();
frame.getContentPane().repaint();
par exemple
import Java.awt.Color;
import Java.awt.Dimension;
import Java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(460, 500);
frame.setTitle("Circles generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.setVisible(true);
}
});
String input = JOptionPane.showInputDialog("Enter n:");
CustomComponents0 component = new CustomComponents0();
frame.add(component);
frame.getContentPane().validate();
frame.getContentPane().repaint();
}
static class CustomComponents0 extends JLabel {
private static final long serialVersionUID = 1L;
@Override
public Dimension getMinimumSize() {
return new Dimension(200, 100);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}
}
Écrivez simplement:
frame.validate();
frame.repaint();
Cela fera l'affaire.
Cordialement
Vous faites les choses dans le mauvais ordre.
Vous devez d'abord ajouter tous JComponents au JFrame, et ensuite seulement appeler pack()
puis setVisible(true)
sur le JFrame
Si vous avez ajouté plus tard JComponents qui pourrait changer la taille de l'interface graphique, vous devrez appeler à nouveau pack()
, puis repaint()
sur le JFrame après l'avoir fait.
Vous devrez peut-être également appeler frame.repaint()
pour forcer le cadre à se redessiner. J'ai eu des problèmes avant où j'ai essayé de repeindre un composant et il ne mettait pas à jour ce qui était affiché jusqu'à ce que la méthode repaint () du parent soit appelée.