###BufferedImageを描画したいです
bmπ画像を読み込んで
blockTab()においてblockImage(cat.getIdentification_int())で生成した画像を
白紙のblockTabEmptyに貼り付けます。
そしてpaint(Grapics g)においてblockTabEmptyを描画したいです。
発生している問題・エラーメッセージ
classの結びつけがわかっていないからだと思うのですが、paint(Graphics g)が呼び出されません。
また、@Overrideをpaint(Graphics g)につけようものなから以下のようなエラーが出ます。
SerialLatest.java:120: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません @Override
該当のソースコード
java
1class MainWindow{ 2 BufferedImage[] eachBlock; 3 JFrame mainWin; 4 BufferedImage blockTabEmpty; 5 Catcher cat; 6 BufferedImage copy; 7 ArrayList<BufferedImage> previousImage; 8 ArrayList<Integer> previourIdentification; 9 10 public MainWindow(SerialPort inputPort){ 11 System.out.println("正常に動作開始"); 12 blockTabEmpty=new BufferedImage(452,256,BufferedImage.TYPE_4BYTE_ABGR); 13 mainWin=new JFrame(); 14 mainWin.setLayout(null); 15 mainWin.setTitle("プログラム"); 16 mainWin.setSize(1400,700); 17 mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 mainWin.setBackground(Color.WHITE); 19 cat = new Catcher(inputPort); 20 cat.addEventListener(new SerialEventListener(){ 21 @Override 22 public void myAct(OutbrakeEvent myEvent){ 23 textTab(); 24 blockTab(); 25 } 26 }); 27 previousImage =new ArrayList<>(); 28 previourIdentification=new ArrayList<>(); 29 previousImage.add(new BufferedImage(1000,1000,BufferedImage.TYPE_4BYTE_ABGR)); 30 copy=new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB); 31 eachBlock = new BufferedImage[9]; 32 try{ 33 eachBlock[0]=ImageIO.read(new File("./Block/TR.bmp")); 34 eachBlock[1]=ImageIO.read(new File("./Block/TL.bmp")); 35 eachBlock[2]=ImageIO.read(new File("./Block/MF.bmp")); 36 eachBlock[3]=ImageIO.read(new File("./Block/IFRS.bmp")); 37 eachBlock[4]=ImageIO.read(new File("./Block/IFLS.bmp")); 38 eachBlock[5]=ImageIO.read(new File("./Block/IFRLS.bmp")); 39 eachBlock[6]=ImageIO.read(new File("./Block/IFRSE.bmp")); 40 eachBlock[7]=ImageIO.read(new File("./Block/IFLSE.bmp")); 41 eachBlock[8]=ImageIO.read(new File("./Block/IFRLSE.bmp")); 42 }catch(IOException e){ 43 System.out.println("Erro_inportEachBlock"); 44 System.exit(0); 45 } 46 mainWin.setVisible(true); 47 48 49 } 50 public void blockTab(){ 51 BufferedImage bi = blockImage(cat.getIdentification_int()); 52 53 Graphics g=blockTabEmpty.createGraphics(); 54 float h=(float)bi.getHeight(); 55 float w=(float)bi.getWidth(); 56 if(w > 680){ 57 w = 680; 58 } 59 if(h > 650){ 60 h = 650; 61 } 62 g.setColor(Color.BLACK); 63 g.fillRect(0,0,452,256); 64 g.drawImage(bi,0,0,(int)w,(int)h,mainWin); 65 mainWin.repaint(); 66 } 67 68 public void paint(Graphics g){ 69 g.drawImage(blockTabEmpty,690,10,mainWin); 70 71 } 72 public BufferedImage blockImage(int identification){ 73 BufferedImage bi =new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB); 74 previourIdentification.add(identification); 75 76 bi=new BufferedImage(eachBlock[0].getWidth(),eachBlock[identification-1].getHeight()+copy.getHeight(),BufferedImage.TYPE_INT_ARGB); 77 Graphics g=bi.createGraphics(); 78 g.drawImage(copy,0,0,null); 79 g.drawImage(eachBlock[identification-1],0,copy.getHeight(),null); 80 //略 81 return bi; 82 } 83}
試したこと
classの継承とか?が間違っていると思ったのでMainWindowにJFrame,appletを継承したりしたのですが
さっぱりです。
お願い
いまいちpaint(),repaint()についてのクラス関係がわかりません。
このプログラムを例にどこが間違っているのか指摘、クラス関係をご教授いただけるとうれしいです。
あと、調べているときによく出てくる「アップレットの実行時にpaint()は呼ばれる」とはどういうことですか?