Heim >Java >javaLernprogramm >Warum wird die paintComponent()-Methode meines erweiterten JPanel trotz Verwendung von repaint() nicht aufgerufen?

Warum wird die paintComponent()-Methode meines erweiterten JPanel trotz Verwendung von repaint() nicht aufgerufen?

DDD
DDDOriginal
2024-12-14 21:38:14885Durchsuche

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

Programm greift nicht auf die Methode paintComponent() der erweiterten JPanel-Klasse zu

Problem

Der bereitgestellte Code enthält einen JFrame und die entsprechende JPanel-Erweiterung. Während die Methode repaint() des JPanel wiederholt aufgerufen wird, schlägt die Ausführung der Methode paintComponent() fehl. Dies hat zu dem Verdacht geführt, dass das imageDimension-Objekt die Ursache des Problems sein könnte.

Lösung

Obwohl der bereitgestellte Kontext nicht explizit auf Byte-Arrays verweist, ist dies der Fall Es scheint, dass das Ziel darin besteht, Graustufen-Miniaturansichten zu erstellen und diese dem Symbol einer Komponente zuzuweisen. Der folgende Beispielcode bietet eine Methode zum Konvertieren vorhandener Beispielsymbole in Graustufen und zum Verwenden von setIcon() zum Aktualisieren der Komponente. Dieser Ansatz kann auf jedes Bild angewendet werden.

Es ist erwähnenswert, dass die oben genannte Graustufenkonvertierung mit ColorConvertOp oder durch Aktualisieren der Komponente selbst anstelle ihres Symbols erreicht werden kann.

import java.awt.*;<br>import javax.swing.*;</p>
<p>public class IconExample {</p>
<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();
}

}

Dieses Beispiel veranschaulicht die Verwendung von Collections.shuffle um die Symbolreihenfolge zufällig festzulegen und die Symbole im Bedienfeld jede Sekunde zu aktualisieren. Die Methode repaint() stellt sicher, dass die Änderungen auf dem Bildschirm sichtbar sind und die Symbole kontinuierlich aktualisiert werden.

Durch die Bereitstellung dieses alternativen Ansatzes zeigen wir, dass das Problem mit zusammenhängt Die Methode paintComponent() hat möglicherweise nichts mit dem Objekt imageDimension zu tun und ergibt sich stattdessen aus der spezifischen Implementierung der Grafik- und Bildverarbeitung in Ihrem Original Code.

Das obige ist der detaillierte Inhalt vonWarum wird die paintComponent()-Methode meines erweiterten JPanel trotz Verwendung von repaint() nicht aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn