Heim >Java >javaLernprogramm >Warum wird die paintComponent()-Methode meines erweiterten JPanel trotz Verwendung von repaint() nicht aufgerufen?
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.
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!