提供的程式碼具有 JFrame 及其對應的 JPanel 擴充。當重複呼叫 JPanel 的 repaint() 方法時,它無法執行 paintComponent() 方法。這導致懷疑 imageDimension 物件可能是問題的根源。
雖然提供的上下文沒有明確引用位元組數組,但它看起來目標是創建灰度縮圖並將它們分配給組件的圖示。下面的範例程式碼提供了一種將現有範例圖示轉換為灰階並使用 setIcon() 更新元件的方法。這種方法可以應用於任何圖像。
值得注意的是,上述灰階轉換可以使用 ColorConvertOp 或透過更新元件本身而不是其圖示來實現。
導入java.awt.*;<br>導入javax.swing.*;<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(); }
}
此範例說明了Collections.shuffle 隨機化圖示順序並每秒更新面板中的圖示。 repaint() 方法確保變更在螢幕上可見,並且圖示不斷更新。
透過提供這種替代方法,我們證明了與相關的問題PaintComponent() 方法可能與imageDimension 物件無關,而是源自於原始圖形和圖像處理的特定實作代碼。
以上是儘管使用了 repaint(),為什麼我的擴充 JPanel 的 PaintComponent() 方法沒有被呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!