• 検索結果がありません。

Graphical User Interface 描画する

N/A
N/A
Protected

Academic year: 2021

シェア "Graphical User Interface 描画する"

Copied!
19
0
0

読み込み中.... (全文を見る)

全文

(1)

Graphical User

Interface

描画する

オブジェクト指向プログラミング特論 2016年度 只木進一:工学系研究科

(2)

描画の基本

javax.swing.JPanelに描画する

paint()

または

paintComponent()

メソッ

ドを上書きすることによって描画する

この中で描画対象を描く

基本的図形要素は準備されている

しかし

画面の重なりによる再描画の場合

最初から書き直すと時間がかかる

2

(3)

描画の基本2

ウィンドウの重なりで再描画が必要な

場合

repaint()が呼ばれる→paint()が呼ばれる

再描画に備えて

java.awt.image.BufferedImage

してイメージを生成しておく

paint()内ではimageの描画のみ

imageをファイルに保存できる

3

(4)

shapeSampleの全体構成

ShapeSampleMain clear draw save ShapeSampleMain clear() drawSamples() repaint() saveImage() paint() initializeImage() BufferedImage 生成 背景色で塗りつぶす 内容作成 描画 4

(5)

ボタン用JPanel

描画用JPanel

(6)

イメージ初期化

BufferedImageのインスタンスを生

成する

背景で全体を塗りつぶす

public void initializeImage() {

Dimension dimension = getPreferredSize(); //空のイメージ生成

image = new BufferedImage(dimension.width,

dimension.height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) image.getGraphics(); g.setColor(this.getBackground());//背景色で塗りつぶし g.fillRect(0, 0, dimension.width, dimension.height);

}

(7)

イメージを作成する

public void drawSamples() { initializeImage();

Graphics2D g = (Graphics2D) image.getGraphics();

//四角形 Rectangle2D.Double rect = new Rectangle2D.Double(50., 50., 100., 100.); g.setColor(Color.GREEN); g.fill(rect); //楕円 Ellipse2D.Double ellipse = new Ellipse2D.Double(200., 200., 100., 50.); g.setColor(Color.RED); g.draw(ellipse); //直線 g.setColor(new Color(30, 20, 100));

Line2D.Double line = new Line2D.Double(0., 0., 400., 300.); g.draw(line);

}

(8)

JPanelにイメージを表示する

JPanelを描画:paint()メソッド

ここで図を描いていては、時間がかかる

あらかじめ描いてあるimageを表示する

public void paint(java.awt.Graphics g) {

if (image == null) {return;}

//ここではimageを貼り付けるだけ

g.drawImage(image,

0, 0, image.getWidth(), image.getHeight(), this);

}

(9)

イメージをファイルに保存する

javax.imageio.ImageIOクラス

イメージファイルの操作の関数の集合

ファイルからの読み込み

BufferdImage read(File file)

ファイルへの書き出し

write(RenderedImage im, String formatName, File output)

RenderedImageはBufferedImageが利

用しているインターフェース

(10)

public void saveImage(File file) {

if (!fileChooser.FileUtil.checkWritable(file)) {return;} FileOutputStream out = null;

try {

out = new FileOutputStream(file); } catch (FileNotFoundException ex) {

fileChooser.FileUtil.showError(ex.getMessage());} if (out != null) {

String ext = fileChooser.FileUtil.getExtention(file.getName()); try {

javax.imageio.ImageIO.write(image, ext, out);

String message =

"イメージを" + file.getName() + "に保存しました。"; fileChooser.FileUtil.showMessage(message);

} catch (IOException ex) {

fileChooser.FileUtil.showError(ex.getMessage()); } } } 前回のfileChooser.FileUtilの応用 10

(11)

簡単なドローツール

マウスで線を描く

java.awt.event.MouseListener

java.awt.event.MouseMotionListener

線の太さ

java.awt.BasicStroke

消す

背景色で太い線を引く

11

(12)
(13)

マウスイベントを拾う

インターフェイスの実装

java.awt.event.MouseListener

java.awt.event.MouseMotionListener

対応するメソッド

リスナの設定

addMouseListener(this);

addMouseMotionListener(this);

13

(14)

マウスでの描画の動作

マウスボタンを押す

mousePressed(MouseEvent e)

マウスをドラッグする

mouseDragged(MouseEvent e)

マウスボタンを離す

mouseReleased(MouseEvent e)

14

(15)

マウス描画の基本的考え方

直前のマウスの位置を変数pointに保

変数pointはjava.awt.Pointのインスタン

マウスドラッグのイベントevtから

evt.getX()、evt.getY()で座標を取得

Pointとマウス位置を結ぶ直線を引く

マウス位置をpointに保存する

15

(16)

マウスドラッグ

public void mouseDragged(MouseEvent e) { if (point != null) {

Graphics2D g = (Graphics2D) image.getGraphics(); if (eraser) {//消しゴムの場合 g.setColor(this.getBackground()); g.setStroke(eraserStroke); } else { g.setColor(this.getForeground()); g.setStroke(stroke); }

g.drawLine(point.x, point.y, e.getX(), e.getY()); point = new Point(e.getPoint());

}

repaint(); }

(17)

マウスボタンを離す

public void mouseReleased(MouseEvent e) { if (point != null) {

Graphics2D g = (Graphics2D) image.getGraphics(); if (eraser) {//消しゴムの場合 g.setColor(this.getBackground()); g.setStroke(eraserStroke); } else { g.setColor(this.getForeground()); g.setStroke(stroke); }

g.drawLine(point.x, point.y, e.getX(), e.getY()); point = null;

}

repaint(); }

(18)

線幅の設定

線の設定クラス

java.awt.BasicStroke

線幅、終端処理などを設定する

Graphics2D.setStroke()メソッド

18

(19)

色の設定

javax.swing.JColorChooserを使う

private void selectColorActionPerformed(

java.awt.event.ActionEvent evt) { java.awt.Color newColor =

JColorChooser.showDialog(

this, "Choose Foreground Color", getBackground()); drawPanel.setForeground(newColor);

}

参照

関連したドキュメント

ホーム > マニュアル > ユーザーマニュアル > 事前知識> 「サイボウズ デヂエ」の画面構成..

• and (last but not least) making clear how the “graphical condensation” identities of Kuo [11, Theorem 2.1 and Theorem 2.3], Yan, Yeh and Zhang [23, Theorem 2.2 and Theorem 3.2]

内 容 受講対象者 受講者数 研修月日

石川県の製造業における製造品出荷額等は、平成 17 年工業統計では、全体の 24,913 億円の うち、機械 (注 2) が 15,310 億円(構成比 61.5%)、食品 (注 3) が

発電機構成部品 より発生する熱の 冷却媒体として用 いる水素ガスや起 動・停止時の置換 用等で用いられる

「ゼロエミッション東京戦略 2020 Update & Report」、都の全体計画などで掲げている目標の達成 状況と取組の実施状況を紹介し

The Strata graphical user interface ensures an easy startup for evaluation purposes like controlling motor voltage/frequency, choosing between closed loop Field Oriented Control

年次 時期