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

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

ただいまの
回答率

90.50%

  • Java

    13792questions

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

JAVA Graphicsクラスの初期設定について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 323

mike2mike4

score 234

JAVA初心者です。SWTでCanvasの上に長方形を描画しようとしています。
メソッドに引数を渡す前に初期設定をしようとして、
http://yan-note.blogspot.jp/2009/06/awt-2.html
を参考にして、
Graphics g = getGraphics();
としました。
ですが、eclipseでエラーが表示されています。
「メソッド getGraphics() は型 new SelectionAdapter(){} で未定義です」と出ます。

import java.awt.Graphics;
とクラスはインポートしているのですが、何故出来ないのかよく分かりません。

参考までにソースを添付します
import java.awt.Color;
import java.awt.Graphics;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class TestApp extends Shell {
private Text text;

/**

  • Launch the application.
  • @param args
    */
    public static void main(String args[]) {
    try {
    Display display = Display.getDefault();
    TestApp shell = new TestApp(display);
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch()) {
    display.sleep();
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

/**

  • Create the shell.
  • @param display
    */
    public TestApp(Display display) {
    super(display, SWT.SHELL_TRIM);

Label lblNewLabel = new Label(this, SWT.NONE);
lblNewLabel.setBounds(10, 10, 86, 15);
lblNewLabel.setText("グラフです");

Canvas canvas = new Canvas(this, SWT.NONE);
canvas.setBounds(10, 31, 342, 182);

text = new Text(this, SWT.BORDER);
text.setBounds(10, 230, 73, 21);
text.setText("0");

Button button = new Button(this, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
/*

  • @Override(非 Javadoc)
  • @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
    */

public void widgetSelected(SelectionEvent arg0) {
/* ここにボタンを押したときの処理を書く

  • */
    int data;

Graphics g = getGraphics(); 
data =  Integer.parseInt(text.getText());

if (data < 0 || data > 100){
Shell shell = new Shell(display);
MessageBox msg = new MessageBox(shell);
msg.setText("エラー");
msg.setMessage("0以上100以下を入れてください");
msg.open();
} else {
lblNewLabel.setText(text.getText());
bar(g);
}
}
});
button.setBounds(94, 226, 75, 25);
button.setText("作成");
createContents();
}

/**

  • Create contents of the shell.
    */
    protected void createContents() {
    setText("SWT Application");
    setSize(450, 300);

}

@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
public void bar(Graphics g){
g.setColor(Color.darkGray);  
g.fillRect(10, 40, 100, 50);
}

}

3日ほど悩んでますが、どうすれば良いのか皆目見当が付かないので分かる方お願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

参考となるページでgetGraphicsを使用している内部クラスMyMouseAdapterの外部クラスであるGraphicSample03は、Frameを継承しています。そしてgetGraphicsはjava.awt.Frameが持つメソッドです。swtとawtは名前が似ていますが全く別物です。swt上でawtで使うのはちょっと無理やりしないとできません。参考にしているページがawt用なのが間違いだと思われます。

無理やりやる方法の参考
http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/DrawanXusingAWTGraphics.htm

素直にswt用の描画機構GCを使う方法の参考
http://www.eclipse.org/articles/Article-SWT-graphics/SWT_graphics.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/30 17:55

    ご回答ありがとうございます。え、英語ですか。頑張って読んでみます。素直にswtを使いたいと思います。

    キャンセル

  • 2017/01/30 18:20 編集

    得てしてプログラミングの参考サイトは英語が多くなります。なぜなら日本語でやり取りしているのは日本人プログラマ同士だけで、大きく世界を見渡せば、プログラマの圧倒的多数は英語でやり取りするからです。プログラミングについて調べごとをする上で、英語が読める読めないは、田舎の図書館で調べごとをするのと国立国会図書館で調べごとをするくらい差があります。書いたり喋れなくとも、読めるだけでかなり有利になるので、英語を毛嫌いせず、読む努力をしてみましょう。

    キャンセル

  • 2017/01/30 18:44

    はい、わかりました。丁寧にありがとうございます。

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13792questions

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