windowbuilder
がない
ちょっとEclipseでJAVAを触る用事があって、久しぶりにPleiades All in
Oneの4.6 Neonをダウンロードしました。で、GUIでプログラミングしようとすると、windowbuilderがない。あれ? 標準で付いて
くるんじゃなかったのか?
も、もしかしてっ! と、MARSに落としたら付いてました。どうやら、今(2017/01/28現在)バグで、
Neonには対応して無いようです。というか、ファイルサーバーに一部のファイルが無い状態らしい。多分、近々直される
と思いますが、参考まで。
SWTがない
で、早速、プログラミングをしようと、SWTで新規作成してみて実行してみたら、「インポートされた
org.eclipseは見つかりません」と出る。どうやら、Neonにはorg.eclipse*が無いらしくインポートできない状
態。 SWTのjarファイルを拾って来ないといけないようです。↓を参照。
Eclipse
でJava SWTアプリケーション作成
windowsなので〜/eclipes/plugins下にファイルを入れて、設定します。
「プロジェクト」→「プロパティ」→「Javaのビルド・パス」の「ライブラリー」の
「外部JARの追加」で、swt.jarを登録します。
これで、実行出来るようになりました。
getGraphics()っ
てなんやねん
GUIでアプリを作ろうとしたのですが、今度はAWT
とSWTとをごっちゃにして3日ほど悩みました。AWTの方では Graphics g =
getGraphics(); と書いてあったので、そのようにメソッドの引数もGraphics g
で書いていたらエラーが出る。思い余ってteratailで聞いたら前記のようにAWTとSWTとをごっちゃにしていると指摘されました。SWTならば、
GC gc = new GC(canvas);といったインスタンスにしないといけなかったです。
というかswingで作ろうとしていたら、いつの間に
かSWTで作っていた。何のことやらわからねぇと思うが……
で、出来た画像の上に
ランダムにグラフを5個つくるアプリ
描画にpaintイベントを使わずに、描画メソッドを
呼び出して描いてます。
import
java.util.Random;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
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;
Image image
= new Image(display, "D:/Pictuers/watch.jpg");
GC gc = new
GC(canvas);
try {
data =
Integer.parseInt(text.getText());
if (data < 1 || data >
100){
//1より小さいか100を越えたらメッセージボックスを作る
Shell shell
= new Shell(display);
MessageBox
msg = new MessageBox(shell);
msg.setText("エラー");
msg.setMessage("1以上100以下を入れてください");
msg.open();
} else {
lblNewLabel.setText(text.getText());
//画像表示
gc.drawImage(image, 0, 0,
image.getImageData().width,
image.getImageData().height,
0, 0,
canvas.getSize().x, canvas.getSize().y);
//乱数で5個四角形を作る
Random rnd =
new Random();
for ( int i
= 0; i < 5; i++){
bar(10,i * 25 + 10,
rnd.nextInt(data), gc);
}
gc.dispose();
image.dispose();
}
} catch
(NumberFormatException e){
Shell shell = new
Shell(display);
MessageBox msg = new
MessageBox(shell);
msg.setText("エラー");
msg.setMessage("整数値の1以上100以下を入れてください");
msg.open();
}
}
});
button.setBounds(94, 226, 75, 25);
button.setText("作成");
createContents();
}
/**
* Create contents of the
shell.
*/
protected void createContents()
{
setText("乱数グラフ");
setSize(450,
300);
}
@Override
protected void checkSubclass()
{
// Disable
the check that prevents subclassing of SWT
components
}
public void bar(int x, int y,
int data, GC gc){
//四角形を作るメソッド
gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_RED));
gc.fillRectangle(x, y, data, 10);
}
}
|
|