Maison > Java > javaDidacticiel > Pourquoi la méthode paintComponent() de mon JPanel étendu n'est-elle pas appelée malgré l'utilisation de repaint() ?

Pourquoi la méthode paintComponent() de mon JPanel étendu n'est-elle pas appelée malgré l'utilisation de repaint() ?

DDD
Libérer: 2024-12-14 21:38:14
original
884 Les gens l'ont consulté

Why Isn't My Extended JPanel's paintComponent() Method Being Called Despite Using repaint()?

Le programme n'accède pas à la méthode paintComponent() de la classe JPanel étendue

Problème

Le code fourni comporte un JFrame et son extension JPanel correspondante. Alors que la méthode repaint() du JPanel est appelée à plusieurs reprises, elle ne parvient pas à exécuter la méthode paintComponent(). Cela a conduit à soupçonner que l'objet imageDimension pourrait être la source du problème.

Solution

Bien que le contexte fourni ne fasse pas explicitement référence aux tableaux d'octets, il Il semble que l'objectif soit de créer des vignettes en niveaux de gris et de les attribuer à l'icône d'un composant. L'exemple de code ci-dessous propose une méthode pour convertir des exemples d'icônes existantes en niveaux de gris et utiliser setIcon() pour mettre à jour le composant. Cette approche peut être appliquée à n'importe quelle image.

Il convient de noter que la conversion en niveaux de gris susmentionnée peut être obtenue en utilisant ColorConvertOp ou en mettant à jour le composant lui-même au lieu de son icône.

importer java.awt.*;<br>importer javax.swing.*;</p>
<p>public class IconExample {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public static void main(String[] args) {
    // Create a list of icons
    List<Icon> icons = new ArrayList<>();
    icons.add(new ImageIcon("image1.png"));
    icons.add(new ImageIcon("image2.png"));

    // Create a panel to hold the icons
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(1, icons.size()));

    // Add the icons to the panel
    for (Icon icon : icons) {
        panel.add(new JLabel(icon));
    }

    // Create a frame for the panel
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.add(panel);

    // Make the frame visible
    frame.setVisible(true);

    // Create a timer to update the icons
    Timer timer = new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Shuffle the icons
            Collections.shuffle(icons);

            // Update the icons in the panel
            for (int i = 0; i < icons.size(); i++) {
                panel.getComponent(i).setIcon(icons.get(i));
            }

            // Repaint the panel
            panel.repaint();
        }
    });

    // Start the timer
    timer.start();
}
Copier après la connexion

}

Cet exemple illustre l'utilisation de Collections.shuffle pour randomiser l'ordre des icônes et mettre à jour les icônes dans le panneau toutes les secondes. La méthode repaint() garantit que les modifications sont visibles à l'écran et que les icônes sont continuellement mises à jour.

En proposant cette approche alternative, nous démontrons que le problème est lié au La méthode paintComponent() peut n'être pas liée à l'objet imageDimension et découle plutôt de l'implémentation spécifique des graphiques et de la gestion des images dans votre original. code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal