> Java > java지도 시간 > 내 확장 JPanel 클래스에서 내 PaintComponent() 메서드가 호출되지 않는 이유는 무엇입니까?

내 확장 JPanel 클래스에서 내 PaintComponent() 메서드가 호출되지 않는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-08 20:01:12
원래의
867명이 탐색했습니다.

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

확장 JPanel 클래스의 PaintComponent() 메서드에 액세스하지 않는 프로그램

코드에서 JPanel 클래스를 다음과 같은 새 클래스로 확장했습니다. DrawPanelRemoteControl. 확장 클래스에는 패널 내용 그리기를 담당하는 PaintComponent() 메서드가 있습니다. 그러나 코드에서 PaintComponent() 메서드를 호출하지 않습니다.

이 문제를 해결하려면 DrawPanelRemoteControl 클래스의 repaint() 메서드에서 PaintComponent() 메서드를 호출해야 합니다. 이렇게 하면 패널의 내용을 새로 고쳐야 할 때 PaintComponent() 메서드가 호출됩니다.

수정 사항이 포함된 수정된 코드는 다음과 같습니다.

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();
    }
}
로그인 후 복사

위 내용은 내 확장 JPanel 클래스에서 내 PaintComponent() 메서드가 호출되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿