Eclipseでいろいろ



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);
    }

}




  HOME



(c)Copyright HAZAWA KEIICHI 2017 All rights reserved