Rumah > Java > javaTutorial > Mengapa Kaedah PaintComponent() Extended JPanel Saya Tidak Dipanggil Walaupun Menggunakan repaint()?

Mengapa Kaedah PaintComponent() Extended JPanel Saya Tidak Dipanggil Walaupun Menggunakan repaint()?

DDD
Lepaskan: 2024-12-14 21:38:14
asal
882 orang telah melayarinya

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

Program tidak mengakses kaedah paintComponent() kelas JPanel lanjutan

Isu

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.

Penyelesaian

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 java.awt.*;
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();
}
Salin selepas log masuk

}

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan