JTreeを使う
戻る
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.tree.*;
/**
$Id: jtree.html,v 1.1 2009/06/22 16:12:15 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class TreeViewer extends JFrame implements ActionListener {
private JTree tree;
private JTextField text;
private JLabel label;
private DefaultTreeModel treeModel;
public static void main( String[] args ) {
/* 自分自身を作成 */
TreeViewer viewer = new TreeViewer();
/* 終了処理を追加 */
viewer.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit( 0 );
}
}
);
/* サイズと位置を指定 */
viewer.setBounds( 10, 10, 400, 600 );
/* 実際に表示する */
viewer.setTitle( "ツリー追加削除の実験" );
viewer.setVisible( true );
viewer.pack();
}
public TreeViewer() {
DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode( "root" );
treeModel = new DefaultTreeModel( rootTreeNode );
tree = new JTree( treeModel );
// tree.setBackground( new Color(0x99,0x99,0xff));
// スクロールするペインを追加
JScrollPane scrPane = new JScrollPane();
scrPane.getViewport().setView( tree );
scrPane.setPreferredSize( new Dimension( 400, 400 ) );
JPanel panel = new JPanel();
// panel.setBackground( new Color(0x99,0x66,0xff));
panel.add( scrPane );
// ノード追加ボタン
JButton AddButton = new JButton( "Add" );
AddButton.addActionListener( this );
AddButton.setActionCommand( "Add" );
// ノード削除ボタン
JButton delButton = new JButton( "Del" );
delButton.addActionListener( this );
delButton.setActionCommand( "Del" );
// 未使用
label = new JLabel();
JPanel commandPanel = new JPanel();
commandPanel.add( AddButton );
commandPanel.add( delButton );
commandPanel.add( label );
// 未使用
text = new JTextField( 10 );
Container content = this.getContentPane();
content.add( text, BorderLayout.NORTH );
content.add( panel, BorderLayout.CENTER );
content.add( commandPanel, BorderLayout.SOUTH );
}
public JLabel getLabel() {
return this.label;
}
public synchronized void actionPerformed( ActionEvent e ) {
// synchronized修飾子をつけたほうがいいです!
String action = e.getActionCommand();
/* 現在選択されているノードを取得する */
DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) tree.getLastSelectedPathComponent();
if ( node != null ) {
System.out.println( node.getUserObject() + " が選択されています。" );
/* 現在選択されているノードまでのTreePathを取得 */
TreePath treePath = tree.getSelectionPath();
int count = treePath.getPathCount();
Object pathComponent = treePath.getPathComponent( count - 1 );
if ( action.equals( "Add" ) ) {
// ノード追加 -- とりあえず3個に固定 -- 実は他に応用したい事例がある(^^)
for ( int i = 0;i < 3;i++ ) {
String prefix;
if ( node.isRoot() ) {
prefix = "child";
} else {
prefix = pathComponent.toString();
}
node.add( new DefaultMutableTreeNode( prefix + "-" + i ) );
}
// ノードが追加された部分を展開する
treeModel.reload();
tree.expandPath( treePath );
} else if ( action.equals( "Del" ) ) {
// ノード削除
/* 削除の場合 */
node.removeFromParent();
treeModel.reload();
tree.expandPath( treePath.getParentPath() );
}
}
}
}
戻る