3. Java Hacks¶
3.1. Processing 3をEclipseで使う¶
1.Eclipseの「Help」→「Install New Software」からhttp://proclipsing.googlecode.com/svn/tags/current_releases/proclipsingSite/を登録して、Proclipsingプラグインをインストール
2.[Window]->[Preference] で [Preferences]ダイアログを開き、左側のリストから Proclipsing を選択する。
3.[Processing Path] のテキストフィールドに Processing をインストールしたパスを設定して、Applyボタンを押し、[OK]ボタンをクリックする。
4.パッケージエクスプローラ上で右クリックを行い、 [New]→[Other] で [New] ダイアログを開き、「Processing」フォルダを選択して、「Processing Project」を選んで、[Next]ボタンをクリックする。
5.必要な項目を設定してプロジェクトを作成していく。
6.dataフォルダは、srcディレクトリの中に入れて、パッケージエクスプローラ上で右クリックメニューを出して、更新させる。
7.ビルドしたい場合には、メニュー→「Project」に「Processing Export」という項目が出来ているので、これを使ってビルドを行う。
3.2. Processing with EclipseでOpenGLを使う¶
ProcessingをEclipseで使う場合に困ることはOpenGLの使い方が分かりにくいことです。Linux環境においてOpenGLをProcessing with Eclipseで使う方法を紹介します。:
1.Eclipseのworkspaceに任意のProcessing用フォルダを作成します。ここでは「processing」ディレクトリを作成したとします。
2.processingフォルダにProcessingのサイトからLinux版のProcessingをダウンロードして解凍し、中身を全てprocessingフォルダに入れます。
3.Eclipseのメニューバーの「Project」→「Properties」→「Java Build Path」をクリックし、「Libraries」タブをクリックして、core.jar、jogl.jar、opengl.jar、gluegen-rt.jarのパスを通します。
4.追加したjogl.jarの項目を展開し、"ネイティブ・ライブラリのロケーション”にlibgluegen-rt.so、libjogl_awt.so、libjogl_cg.so、libjogl.soが含まれるディレクトリを指定します。
ネイティブライブラリは/workspace/processing/modes/java/libraries/openglにあります。
これでProcesssing IDEのようにOpenGLを使ったProcessingアプリケーションを作成することが出来ます。
3.3. Swingで作成したGUIアプリケーションにProcessingアプリケーションを埋め込む方法¶
Swingで作成したGUIアプリケーションとProcessingアプリケーションは別々に開発します。以下はSwingでGUIを作成する例です。JFrameを継承して作成します。ここではGUIアプリケーション「xxx」、Processingアプリケーション「yyy」とします。Processingアプリケーションを組み込むのは簡単で、まず、yyyの変数(ここではvd)を定義します。次にyyyのインスタンスを作成、「vd.init()」でProcessingアプリケーションを初期化します。あとはJPanelに込み込むために「add」関数を使ってパネルに組み込んでいます。:
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import processing.core.PApplet;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.Component;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.util.*;
public class swing_gui extends JFrame{
yyy vd;
//JPanel用の変数をここで設定しておくと、ActionListenerインターフェースを使ったイベント関数でエラーが出なくなる
JPanel p1;
JPanel p2;
JPanel p3;
public spider_gui(){
this.setTitle("Swing GUI");
this.setSize(new Dimension(1024,720));
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BoxLayout boxlayout = new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS);
this.setLayout(boxlayout);
//Swingでメニューバーを作成するには以下のように書きます。
JMenuBar menubar = new JMenuBar();
JMenu menu1 = new JMenu("File");
JMenu menu2 = new JMenu("Edit");
menubar.add(menu1);
menubar.add(menu2);
JMenuItem menuitem1 = new JMenuItem("New");
JMenuItem menuitem2 = new JMenuItem("Open");
JMenuItem menuitem3 = new JMenuItem("Close");
menu1.add(menuitem1);
menu1.add(menuitem2);
menu1.add(menuitem3);
setJMenuBar(menubar);
JMenuItem menuitem21 = new JMenuItem("切り抜き");
JMenuItem menuitem22 = new JMenuItem("コピー");
JMenuItem menuitem23 = new JMenuItem("貼り付け");
menu2.add(menuitem21);
menu2.add(menuitem22);
menu2.add(menuitem23);
//Swingでのパネルの設定の仕方は以下のように書きます。
p1 = new JPanel();
p1.setBackground(Color.RED);
p1.setPreferredSize(new Dimension(1024,25));
p1.setLayout(new GridLayout(1,3));
p2 = new JPanel();
p2.setBackground(Color.BLUE);
p2.setPreferredSize(new Dimension(512,150));
p3 = new JPanel();
p3.setBackground(Color.BLACK);
p3.setPreferredSize(new Dimension(512,620));
this.add(p1);
this.add(p2);
this.add(p3);
//メニューバー以外でボタンを設定したい場合は以下のようにして書きます。
JButton btn = new JButton("application1 start");
btn.setPreferredSize(new Dimension(100,50));
btn.setForeground(Color.RED);
btn.setBackground(Color.BLACK);
btn.setFont(new Font("Serif",Font.PLAIN,18));
btn.addActionListener(new call_processing());
p1.add(btn);
JButton btn2 = new JButton("application2 start");
btn2.setPreferredSize(new Dimension(100,50));
btn2.setForeground(Color.RED);
btn2.setBackground(Color.BLACK);
btn2.setFont(new Font("Serif",Font.PLAIN,18));
btn2.addActionListener(new call_processing());
p1.add(btn2);
//Swingで作成したテーブルを設置することも当然出来ます。
DefaultTableModel tableModel = new DefaultTableModel(columnNames,0);
JTable table = new JTable(tableModel);
for(int i=0;i<4;i++){
tableModel.addRow(tabledata[i]);
}
tableModel.addRow(tabledata2);
JScrollPane sp = new JScrollPane(table);
sp.setPreferredSize(new Dimension(500,100));
p2.add(sp);
JTextField text = new JTextField("",10);
text.setColumns(15);
text.setPreferredSize(new Dimension(100,50));
p1.add(text);
}
//call_processingの設定。このクラスでProcessingで作成したアプリケーションを呼ぶことが出来ます。
class call_processing implements ActionListener{
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if(cmd.equals("application1 start")){
vd = new application1();
vd.init();
p3.add(vd);
}else if(cmd.equals("application2 start")){
wm = new application2();
wm.init();
p3.add(wm);
}
}
}
//テーブルを作成します。
private String[][] tabledata = {
{"日本","3勝","0敗","1分"},
{"クロアチア","3勝","1敗","0分"},
{"ブラジル","1敗","2敗","1分"},
{"オーストラリア","2勝","2敗","0分"}
};
private String[] tabledata2 = {"イギリス","2勝","0敗","2分"};
private String[] columnNames = {"COUTRY","Win","Lost","Even"};
//GUIを起動するメイン関数です。
public static void main(String args[]){
swing_gui frame = new swing_gui();
frame.setVisible(true);
}
}