Vectorのサブクラスを実装する
では、先ほどのサンプルを修正して、サブ項目を持つ項目名も正しく表示されるように修正してみましょう。ここではVector継承クラスにnameというフィールドを持たせ、これをtoStringで表示させることにしましょう。
package jp.allabout.java;
import java.awt.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.tree.*;
public class SampleApp extends JFrame{
private static final long serialVersionUID = 1L;
private JTree tree;
private JScrollPane pane;
public SampleApp(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyVector data = new MyVector("root");
data.add("One");
data.add("Two");
MyVector sub = new MyVector("sub folder!");
sub.add("Sub");
sub.add("next sub");
data.add(sub);
tree = new JTree(data);
pane = new JScrollPane(tree);
this.add(pane,BorderLayout.CENTER);
this.setSize(new Dimension(200,200));
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
}
class MyVector extends Vector {
private static final long serialVersionUID = 1L;
private String name;
public MyVector(String s){
super();
this.name = s;
}
public String toString(){
return this.name;
}
}
Vectorのサブクラスを用意し、サブ項目を持つ項目名も正しく表示されるようにできた。 |
意外に簡単に、VectorでJTreeの表示を構築できてしまいました。まぁ、Vector継承クラスを定義するという面倒はありますが、これも一度作ってしまえばそれでおしまいです。正直、わざわざDefaultMutableTreeNodeなんていう舌をかみそうな新しいクラスを覚えるより安直で使いやすかったりするのは、ガイドだけ?