改行も一つのテキストノードとして扱われるので, 手打ちで作ったXMLファイルを扱う場合は要注意.
javax.swing.JTreeの中に表示されるノードがクリックされたときに, 独自の処理をしたい場合には次のようにする.
tree.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if (selPath != null) {
Object selNode = selPath.getLastPathComponent();
if (selNode instanceof MyTreeNode) {
MyTreeNode myNode = (MyTreeNode)selNode;
myNode.clicked(
new Point(e.getX(), e.getY()),
tree.getPathBounds(selPath));
((DefaultTreeModel)tree.getModel()).nodeChanged(myNode);
}
}
}
});
あまり綺麗なソースは言い難いのだが, とりあえずメイン側では上のように処理しておいて, ノード側では次のようにする.
public void clicked(Point point, Rectangle pathBounds) {
Dimension checkSize = this.check.getSize();
if (pathBounds.x < point.x &&
point.x < (pathBounds.x + checkSize.width) &&
pathBounds.y < point.y &&
point.y < (pathBounds.y + checkSize.height)) {
this.check.setSelected(!this.check.isSelected());
}
}
ここではチェックボックスのON/OFFをやっているわけだけど, ノード側では自分がどこに配置されているのか分からないので, 親側から教えてもらっているのがミソ. 自分の基点座標が分かればあとは自分の持っているパーツの座標を 元に判定を行えば良い.
プロパティとして以下のものを設定する
プロパティの設定の仕方として一番簡単なのはjavaの起動時に
とするのが良いかと.eclipseではjavaVM引数に指定すればOK
参考URL: http://www.h7.dion.ne.jp/~cafebabe/java/swing/submetal/
Copyright© 2003 Atsushi Inuzuka, U.E.C. All right reserved.