Kod yang disediakan menampilkan JFrame dan sambungan JPanel yang sepadan dengannya. Semasa kaedah repaint() JPanel dipanggil berulang kali, ia gagal melaksanakan kaedah paintComponent(). Ini telah membawa kepada syak bahawa objek imageDimension boleh menjadi punca isu.
Walaupun konteks yang dibekalkan tidak merujuk tatasusunan bait secara eksplisit, ia nampaknya objektifnya adalah untuk mencipta lakaran kenit skala kelabu dan memberikannya kepada ikon komponen. Kod sampel di bawah menawarkan kaedah untuk menukar ikon sampel sedia ada kepada skala kelabu dan menggunakan setIcon() untuk mengemas kini komponen. Pendekatan ini boleh digunakan pada mana-mana imej.
Perlu diperhatikan bahawa penukaran skala kelabu yang disebutkan di atas boleh dicapai menggunakan ColorConvertOp atau dengan mengemas kini komponen itu sendiri dan bukannya ikonnya.
import javax.swing.*;
IconExample kelas awam {
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(); }
}
Contoh ini menggambarkan penggunaan Collections.shuffle untuk merawak susunan ikon dan mengemas kini ikon dalam panel setiap saat. Kaedah repaint() memastikan perubahan dapat dilihat pada skrin dan ikon sentiasa dikemas kini.
Dengan menyediakan pendekatan alternatif ini, kami menunjukkan bahawa isu yang berkaitan dengan kaedah paintComponent() mungkin tidak berkaitan dengan objek imageDimension dan sebaliknya berpunca daripada pelaksanaan khusus grafik dan pengendalian imej dalam kod asal anda.
Atas ialah kandungan terperinci Mengapa Kaedah PaintComponent() Extended JPanel Saya Tidak Dipanggil Walaupun Menggunakan repaint()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!