Rumah >Java >javaTutorial >Mengapa Kaedah paintComponent() Saya Tidak Dipanggil dalam Kelas JPanel Lanjutan Saya?
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!