Heim >Java >javaLernprogramm >Warum wird meine paintComponent()-Methode in meiner erweiterten JPanel-Klasse nicht aufgerufen?

Warum wird meine paintComponent()-Methode in meiner erweiterten JPanel-Klasse nicht aufgerufen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-08 20:01:12867Durchsuche

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

Programm greift nicht auf die Methode paintComponent() der erweiterten JPanel-Klasse zu

In Ihrem Code haben Sie die JPanel-Klasse um eine neue Klasse namens erweitert DrawPanelRemoteControl. Die erweiterte Klasse verfügt über eine paintComponent()-Methode, die für das Zeichnen des Panelinhalts verantwortlich ist. Sie rufen jedoch nicht die Methode paintComponent() in Ihrem Code auf.

Um dieses Problem zu beheben, müssen Sie die Methode paintComponent() in der Methode repaint() der Klasse DrawPanelRemoteControl aufrufen. Dadurch wird sichergestellt, dass die Methode paintComponent() aufgerufen wird, wenn der Inhalt des Panels aktualisiert werden muss.

Hier ist der geänderte Code mit dem Fix:

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();
    }
}

Das obige ist der detaillierte Inhalt vonWarum wird meine paintComponent()-Methode in meiner erweiterten JPanel-Klasse nicht aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn