Rumah >Java >javaTutorial >Mengapa Kaedah paintComponent() Saya Tidak Dipanggil dalam Kelas JPanel Lanjutan Saya?

Mengapa Kaedah paintComponent() Saya Tidak Dipanggil dalam Kelas JPanel Lanjutan Saya?

Barbara Streisand
Barbara Streisandasal
2024-12-08 20:01:12863semak imbas

Why Isn't My paintComponent() Method Being Called in My Extended JPanel Class?

Program tidak mengakses kaedah paintComponent() kelas JPanel lanjutan

Dalam kod anda, anda telah melanjutkan kelas JPanel dengan kelas baharu yang dipanggil DrawPanelRemoteControl. Kelas lanjutan mempunyai kaedah paintComponent(), yang bertanggungjawab untuk melukis kandungan panel. Walau bagaimanapun, anda tidak memanggil kaedah paintComponent() dalam kod anda.

Untuk menyelesaikan isu ini, anda perlu memanggil kaedah paintComponent() dalam kaedah repaint() kelas DrawPanelRemoteControl. Ini akan memastikan kaedah paintComponent() dipanggil apabila kandungan panel perlu dimuat semula.

Berikut ialah kod yang diubah suai dengan pembetulan:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.ComponentColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.MemoryImageSource;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

class DrawPanelRemoteControl extends JPanel
{
    private byte[] byteArray=null;
    private Image image;
    private JLabel imageLabel=new JLabel();
    private Dimension imageDimension;

    public DrawPanelRemoteControl(Dimension imageDimension)
    {
        this.imageDimension=imageDimension;
        add(imageLabel);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        System.out.println(".");
        if(byteArray!=null)
        {
            image=getGrayscaleImageFromArray(byteArray,imageDimension.width,imageDimension.height);
            imageLabel.setIcon(new ImageIcon(image));
        }
    }

    private Image getGrayscaleImageFromArray(byte[] buffer, int width, int height)
    {
        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
        int[] nBits = { 8 };
        ColorModel cm = new ComponentColorModel(cs, nBits, false, true,Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
        SampleModel sm = cm.createCompatibleSampleModel(width, height);
        DataBufferByte db = new DataBufferByte(buffer, width * height);
        WritableRaster raster = Raster.createWritableRaster(sm, db, null);
        BufferedImage result = new BufferedImage(cm, raster, false, null);
        return result;
    }

    void setNewImageGrayscale(byte[] array)
    {
        this.byteArray=array;
        this.intArray=null;
        repaint();
    }
}

Atas ialah kandungan terperinci Mengapa Kaedah paintComponent() Saya Tidak Dipanggil dalam Kelas JPanel Lanjutan Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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