E-mail:yuu7777@hotmail.com
もう一つのホームページ辞典へ
[戻る]
JTreeのテストプログラム
package testKTree;
import java.awt.*;
import java.awt.event.*; //MouseListenerインターフェイスを使う。
import javax.swing.*;
import javax.swing.tree.*;//TreeNode、DefaultMutableTreeNode、DefaultTreeModel用
import javax.swing.text.*;//JTextComponent用
import javax.swing.event.*; //TreeSelectionListenerなど
/*
* Created on 2004/12/07
*
*JTreeの使い方をテストするプログラム
*JScrollPaneに対するaddMouseListener指定は、動かなかった。なかに入れる部品(この例ではjtree)に指定しなければなっらなかった。
*/
/*
* TreeとEditを左右に分けたパネル
*/
class TestJTreePanel extends JPanel implements MouseListener ,ActionListener,TreeSelectionListener{
//Tree関連フィールド
public TreeNode rootNode = new DefaultMutableTreeNode("rootです");//ルートノード
public JTree jtree = new JTree(rootNode); //Treeの表示とGUIインターフェイス
private DefaultTreeModel treeModel = new DefaultTreeModel(rootNode); //ノード操作クラス
public JScrollPane treePane = new JScrollPane(jtree);;
private int mousePressedX =-1;
private int mousePressedY =-1;
//操作関連(ポップアップメニュー)
JPopupMenu menu = new JPopupMenu();
JMenuItem itemAdd = new JMenuItem("追加");
//エディタフィールド
public JTextComponent jtext = new JEditorPane();
public JScrollPane textPane = new JScrollPane(jtext);
public TestJTreePanel(){//コンストラクタ
super(new GridLayout(1,0));//1行,0列
//スプリットで、左右に分ける。
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);//水平方向で分ける
splitPane.setLeftComponent(treePane);
splitPane.setRightComponent(textPane);
Dimension minimumSize = new Dimension(100, 100);
treePane.setMinimumSize(minimumSize);
textPane.setMinimumSize(minimumSize);
splitPane.setDividerLocation(100);
add(splitPane);
//add(treePane);
//操作関連(ポップアップメニュー)
menu.add(itemAdd);
//イベント設定
jtree.addMouseListener(this);
itemAdd.addActionListener(this);
}
//TreeSelectionListenerの実装(ノードを選択した時に実行)
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
}
//MouseListener関連
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){
mousePressedX = e.getX(); //マウスクリックイベントが発生した位置を取得
mousePressedY = e.getY();
int status = e.getModifiers(); //状態を取得
if((status & MouseEvent.BUTTON3_MASK) != 0){ //右ボタン
menu.show(treePane,mousePressedX,mousePressedY);
}
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
//メニュー関連
public void actionPerformed(ActionEvent e){
if(e.getSource() == itemAdd){
//マウス操作対象のノードパスを取得
TreePath selPath = jtree.getSelectionPath();
if(selPath != null){
Object obj = selPath.getLastPathComponent();
DefaultMutableTreeNode selNode = (DefaultMutableTreeNode) obj; //選択ノード
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新規ノード");
treeModel.insertNodeInto(newNode,selNode,0);
}
}
}
}
/* */
public class TestJTree extends JApplet{
public void init(){//アプレットがロードされた時に呼ばれる。
this.getContentPane().add(new TestJTreePanel() );
}
public static void main(String[] args) {
//Optional: Specify who draws the window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
TestJTreeFrame fram = new TestJTreeFrame();
}
}
class TestJTreeFrame extends JFrame{
TestJTreePanel panel = new TestJTreePanel();
public TestJTreeFrame(){
super("テスト");
//Optional: What happens when the frame closes?
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(panel, BorderLayout.CENTER);
this.setSize(400,300);
this.setVisible(true);
}
}