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!