web-dev-qa-db-fra.com

repeindre () dans Java

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();
}
9
user1141672

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);
        }
    }
}
15
mKorbel

Écrivez simplement:

frame.validate();
frame.repaint();

Cela fera l'affaire.

Cordialement

4
nIcE cOw

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.

2

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.

1
aoi222