JTree の個々のノードのアイコンを設定できるようにする必要があります。たとえば、JTree があり、ノードが何であるかを表すのに役立つカスタム アイコンを持つノードが必要です。
- (レンチアイコン) 設定
- (バグアイコン) デバッグ
- (にこやかな顔のアイコン) 楽しいもの
...
等々。私はいくつかの情報源を試してみましたが、ある程度機能するものはありましたが、ツリーイベントが台無しになり、葉巻はありません. 前もって感謝します。
誰かが要求したように:
class Country {
private String name;
private String flagIcon;
Country(String name, String flagIcon) {
this.name = name;
this.flagIcon = flagIcon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFlagIcon() {
return flagIcon;
}
public void setFlagIcon(String flagIcon) {
this.flagIcon = flagIcon;
}
}
class CountryTreeCellRenderer implements TreeCellRenderer {
private JLabel label;
CountryTreeCellRenderer() {
label = new JLabel();
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof Country) {
Country country = (Country) o;
label.setIcon(new ImageIcon(country.getFlagIcon()));
label.setText(country.getName());
} else {
label.setIcon(null);
label.setText("" + value);
}
return label;
}
}
次に、初期化された場所:
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Countries");
DefaultMutableTreeNode asia = new DefaultMutableTreeNode("General");
Country[] countries = new Country[]{
new Country("Properties", "src/biz/jabaar/lotus/sf/icons/page_white_edit.png"),
new Country("Network", "src/biz/jabaar/lotus/sf/icons/drive_network.png"),
};
for (Country country : countries) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
asia.add(node);
}
そして、これは機能します。サブルートを表示したくないだけで、ノードだけを表示したいだけです。また、このコードは、アイテムをクリックしても強調表示されないようにします。