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

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

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

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

Q&A

解決済

1回答

3051閲覧

java BufferedImage 背景色を変える

1236

総合スコア19

Java

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

0グッド

0クリップ

投稿2020/01/22 16:22

前提・実現したいこと

描画アプリで背景の色を白にしたいです。

発生している問題・エラーメッセージ

setBackground(new Color(255, 255, 255));
これを入れても背景が真っ黒のままです。

該当のソースコード

java

1 BufferedImage bufimg = null; // バッファ付きイメージ 2 3 // ■ コンストラクタ 4 MyCanvas2(MyClient4 obj){ 5 mode=0; // initial value 6 this.setSize(500,500); // キャンバスのサイズを指定 7 setBackground(new Color(255, 255, 255)); 8 addMouseListener(this); // マウスのボタンクリックなどを監視するよう指定 9 addMouseMotionListener(this); // マウスの動きを監視するよう指定 10 client4 = obj; 11 } 12 13 // ■ メソッド(オーバーライド) 14 // フレームに何らかの更新が行われた時の処理 15 public void update(Graphics g) { 16 paint(g); // 下記の paint を呼び出す 17 } 18 19 // ■ メソッド(オーバーライド) 20 public void paint(Graphics g) { 21 d = getSize(); // キャンバスのサイズを取得 22 if (bufimg == null){ // もし仮の画用紙の実体がまだ存在しなければ 23 bufimg = new BufferedImage(700,700, BufferedImage.TYPE_INT_BGR);// 作成 24 } 25

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

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

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

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

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

jimbe

2020/01/22 16:28

回答ではないのでこちらで書きますが, いまさらではありますが, 使われている Canvas クラスは AWT のコンポーネントで, Swing ではありません. Swing と AWT のコンポーネントの混在は 不具合を起こし易く, 原則的に禁止です. 以前のご質問で参考にされたという記事が混在されていましたが, はっきり申し上げて良くないモノを参考にされてしまったということです.
1236

2020/01/22 17:05

Imageの時はsetBackgroundで背景色を変えられたのですが、 BufferedImageでは変えられないのですか?
jimbe

2020/01/22 17:29

書かれているコードでは, setBackground は MyCanvas2 に対して行われており, MyCanvas2 は( BufferedImage では無く) Canvas だったと思いますが.
guest

回答1

0

ベストアンサー

AWT の Canvas は止めて, Swing の JPanel を Canvas 的にするほうが良いのではないでしょうか.

例えば以下のようなクラスで, 白地に黒で自由に線が引けます.
setOutput で出力先をソケットにすればサーバに送信できます.
受信側はありませんが, 別途作成して随時 drawLine を呼べば書けます. (試していません.)

java

1class JCanvas extends JPanel { 2 private int x1, y1; 3 private int width, height; 4 private BufferedImage backImage; 5 private Graphics backGraphics; 6 private PrintStream out = System.out; 7 8 JCanvas(int width, int height){ 9 this.width = width; 10 this.height = height; 11 12 setSize(width,height); 13 14 backImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 15 backGraphics = backImage.getGraphics(); 16 17 //初期背景 18 backGraphics.setColor(Color.WHITE); 19 backGraphics.fillRect(0, 0, width, height); 20 21 //初期筆色 22 backGraphics.setColor(Color.BLACK); 23 24 MouseAdapter mouseAdapter = new MouseAdapter() { 25 public void mousePressed(MouseEvent e){ 26 x1 = e.getX(); 27 y1 = e.getY(); 28 } 29 public void mouseDragged(MouseEvent e){ 30 int x2 = e.getX(); 31 int y2 = e.getY(); 32 drawLine(x1, y1, x2, y2); 33 if(out != null) out.println("line "+x1+" "+y1+" "+x2+" "+y2); 34 x1 = x2; 35 y1 = y2; 36 } 37 }; 38 addMouseListener(mouseAdapter); 39 addMouseMotionListener(mouseAdapter); 40 } 41 42 @Override 43 protected void paintComponent(Graphics g) { 44 super.paintComponent(g); 45 g.drawImage(backImage, 0, 0, width, height, null); 46 } 47 48 /** 描画情報を出力する先. 初期値=System.out */ 49 void setOutput(PrintStream out) { 50 this.out = out; 51 } 52 53 /** 描画色設定 */ 54 void setColor(Color c) { 55 backGraphics.setColor(c); 56 } 57 58 /** 描画色で線を引く */ 59 void drawLine(int x1, int y1, int x2, int y2) { 60 backGraphics.drawLine(x1, y1, x2, y2); 61 repaint(); 62 } 63}

投稿2020/01/22 17:59

jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問