質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

3回答

3349閲覧

javaでpaint(Graphics g)が呼び出せません

NakaKou

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

1クリップ

投稿2020/01/13 01:10

###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()は呼ばれる」とはどういうことですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/01/13 01:34 編集

ご自分が何を作っているのか分からないということでしょうか. ご提示のコードはどのような過程を得て出てきたものでしょう.
NakaKou

2020/01/13 02:15

シリアルポートを使って数字を受け取りその数字に応じて対応した画像を表示するプログラムです。 main関数内でシリアルポートを指定したのちMianWindowをインスタン化します。 MinaWindow内でCatcherというシリアルポートイベント専用のクラスを生成します。 そして受け取った数字をcatcherから受け取り対応した画像をblockTab()で操作します。 (BlockImage()はこれまでに送られてきていた画像と今ある画像を合成するものです。) BufferedImage biに描画したい画像が入っているのでバッファリングをするために白紙のblockTabEmptyに貼り付けます。そしてblocktabEmptyを描画するためにrepaint()でpaint()を よ呼んでpaint()で描画を指定ます。 こんな感じの説明でいいですかね?
jimbe

2020/01/13 09:46

このコードはご自身で1から作られたのか, それとも何かを参考にされたのか, それとも何方か(例えばお知り合いの)方が作られたものか...というつもりでした. つまり NakaKou さんが何をお分かりになっていて何をお分かりになっていないのか, どこからご説明が必要なのかを計りかねています. java でシリアル通信のコードは書けるが Swing は分からないということなのでしょうか.
NakaKou

2020/01/13 14:25

java全体的にネットのコードを見て形だけ覚えてしまい、コードの変更に対応しにくいという感じです
NakaKou

2020/01/13 14:26

そうですね、windowの仕組みがいまいち理解できず、クラスの説明を呼んでも理解できません
guest

回答3

0

【Java入門】GUIの開発フレームワークまとめ(Swing、JavaFx、AWT)あたりを参考にしてみては?

ひとつ注意。JavaFXはJava8以降でJava SEの標準GUIフレームワークとなっていますとありますが、
Java11からはバンドルされなくなりました。ので、別途インストールする必要があります。
OpenJDK 11にJavaFXを導入する

Javaでデスクトップアプリケーションを作成したい。で、どのようなフレームワーク…というはなしであれば、SwingにするかJavaFXにするか(もちろんAWTでも)という選択になるでしょう。

投稿2020/01/18 02:10

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

public void paint(Graphics g) は java.awt.Component にあるメソッドです.
ですので java.awt.Component (もしくはそれを継承したクラス)を継承していなければ(そして然るべきツリー構造に含まれなければ) 呼び出されません.
「同じ名前のメソッドを定義すればどんなクラスでも勝手にシステムが呼んでくれる」わけではありません.

Swing の理解が足りないと思われましたら, (今は JavaFX があるとはいえ) Swing の記事もネットにまだあだあると思いますので, 簡単なものから探してみては如何でしょうか.

例えば↓のような感じです.
【Java】ウィンドウに画像を描画する

投稿2020/01/13 15:31

編集2020/01/18 03:23
jimbe

総合スコア12612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あと、調べているときによく出てくる「アップレットの実行時にpaint()は呼ばれる」とはどういうことですか?

Javaアプレットは、もはや廃止された技術です(Java 11では完全に削除されて実行できません)。まずは、どのようなフレームワークに則って作るかから考え直す必要があります。

投稿2020/01/13 01:31

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NakaKou

2020/01/13 02:18

了解しました。 あと、申し訳ないのですが このようなアプリを作るのは初めてでどこから進めればいいいのかわからないのですが、 「どのようなフレームワークに則って作るか」とは具体にどういうことか教えてもらえませんか?
shiketa

2020/01/18 02:13

コメントをぶら下げるところを間違えました。削除はできないようなのでそのままにしときます m(._.)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問