Visual Editor で Swing アプリケーションを作成 Swing プログラミングに慣れて居ても ソースコード上丈で思い通りの GUI を作成するのは 可成り骨の折れる作業で有る Visual Editor を使用すれば 試行錯誤し乍ら 非常に簡単に GUI アプリケーションを作成する事が出来る 此処では JFrame を拡張して 簡単なアプリケーションを作成して観る事にする Java Swing JApplit Visual Class JDialog JFrame Visual Class JPanel Visual Class プロジェクトを右クリックして [ 新規 ] [ 其の他 ] を選択し ダイアログで [JFrame Visual Class] を選択して [ 次へ ] をクリックする [ 名前 ] に適当な名前を入力する ( 此処では Frame と仕た ) 1
プレビュー画面と コンポーネントパレットが付いた Visual Editor が起動した 右側のコンポーネントパレットからコンポーネントを選択し プレビュー画面 ( フレーム ) の上でクリックすると コンポーネントを貼り付ける事が出来る 2
亦 編集結果は 其の都度ソースに反映される コンポーネントの配置等は 総て通常の Java ソースファイルに格納され 別のプロパティファイル等は作成されない 猶 ソースを手作業で編集すると 其の結果もプレビューに反映される 但し 余りにも過激にソースを書き換えると Visual Editor がソースを認識出来なく成り プレビューが崩れたり 表示されなく成って仕舞う事が有るので ソースは 成る可く頻繁に保存し 且つ 構造的に大きな変更を加える時は 前のバージョンのソースをバックアップして置く事を推奨する コンポーネントがどのように組み合わさっているのかを確認するには Java Beans ビューを利用します また メニュー系のコンポーネントなど 画面上で選択 挿入しにくいものについても この Java Beans ビュー上のツリーで編集を行います 編集中の Swing オブジェクトは [Java Bean] と仕て実行する事が出来る 実行に当たり 特に main メソッド等を用意する必要は無い 3
実行すると Swing のオブジェクトを実際に表示して GUI 動作を確認する事が出来る JSplitPane で 2 分割した領域に JTree と JTable を表示し エクスプローラの様なアプリケーションを作成して観た 左側でフォルダを選択すると 右側に其のフォルダのファイル一覧が表示される 4
samples/swing/visualeditor/frame.java - Eclipse SDK package samples.swing.visualeditor; import java.awt.borderlayout; import java.io.file; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jsplitpane; import javax.swing.jtable; import javax.swing.jtree; public class Frame extends JFrame { private JPanel jcontentpane = null; private JSplitPane jsplitpane = null; private JTree jtree = null; private JTable jtable = null; This is the default constructor public Frame() { super(); initialize(); This method initializes this @return void private void initialize() { this.setsize(817, 474); this.setcontentpane(getjcontentpane()); this.settitle("jframe"); This method initializes jcontentpane @return javax.swing.jpanel private JPanel getjcontentpane() { if (jcontentpane == null) { jcontentpane = new JPanel(); jcontentpane.setlayout(new BorderLayout()); jcontentpane.add(getjsplitpane(), java.awt.borderlayout.center); 5
return jcontentpane; This method initializes jsplitpane @return javax.swing.jsplitpane private JSplitPane getjsplitpane() { if (jsplitpane == null) { jsplitpane = new JSplitPane(); jsplitpane.setleftcomponent(getjtree()); jsplitpane.setrightcomponent(getjtable()); return jsplitpane; This method initializes jtree @return javax.swing.jtree private JTree getjtree() { if (jtree == null) { jtree = new JTree(new FolderTreeNode(new File("c:/"))); jtree.addtreeselectionlistener(new FolderTreeSelectionListener(this)); return jtree; This method initializes jtable @return javax.swing.jtable private JTable getjtable() { if (jtable == null) { jtable = new JTable(); return jtable; public void showfolder(file file) { jtable = new JTable(new FolderTableModel(file)); jsplitpane.setrightcomponent(jtable); // @jve:decl-index=0:visual-constraint="10,10" 6
samples/swing/visualeditor/foldertablemodel.java - Eclipse SDK package samples.swing.visualeditor; import java.io.file; import java.util.arraylist; import java.util.date; import javax.swing.table.abstracttablemodel; public class FolderTableModel extends AbstractTableModel { private File file; private ArrayList<File> filelist = new ArrayList<File>(); public FolderTableModel(File file) { this.file = file; for (File child : file.listfiles()) { if (!child.isdirectory()) { filelist.add(child); public int getrowcount() { return filelist.size(); public int getcolumncount() { return 3; public Object getvalueat(int row, int col) { File child = filelist.get(row); switch (col) { case 0: return child.getname(); case 1: return new Long(child.length()); case 2: return new Date(child.lastModified()); default: return null; 7
samples/swing/visualeditor/foldertreenode.java - Eclipse SDK package samples.swing.visualeditor; import java.io.file; import java.io.filefilter; import javax.swing.tree.defaultmutabletreenode; import javax.swing.tree.treenode; public class FolderTreeNode extends DefaultMutableTreeNode { private File file; private File[] children; public FolderTreeNode(File file) { this.file = file; if (file.isdirectory()) { children = file.listfiles(new FileFilter() { public boolean accept(file file) { return file.isdirectory(); ); public int getchildcount() { return children == null? 0 : children.length; public TreeNode getchildat(int i) { return new FolderTreeNode(children[i]); public String tostring() { return file.getname(); public File getfile() { return file; samples/swing/visualeditor/foldertreeselectionlistener.java - Eclipse SDK package samples.swing.visualeditor; import javax.swing.event.treeselectionevent; import javax.swing.event.treeselectionlistener; public class FolderTreeSelectionListener implements TreeSelectionListener { private Frame frame; public FolderTreeSelectionListener(Frame frame) { this.frame = frame; public void valuechanged(treeselectionevent e) { FolderTreeNode ftn = (FolderTreeNode)e.getPath().getLastPathComponent(); if (ftn!= null) { frame.showfolder(ftn.getfile()); 8