JTree ツリーにチェックボックスをつける・Javaの小技、サンプル、ニュースなどを紹介していきます。みんなで参考にしてください。

Ads by Google


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JTree ツリーにチェックボックスをつける



チェックボックスをツリーにつけるには、以下を参照してください。

TreeCellRendererを継承して自分のレンダラを作成します。

チェックのON/OFFで実行される内容は適当に実装してください。



/**
* セルレンダラ
*/
protected class MyCellRenderer extends JPanel implements TreeCellRenderer {
/**
* チェックボックス
*/
JCheckBox check;
/**
* ラベル
*/
JLabel label;

/**
* コンストラクタ
*/
public MyCellRenderer()
{
add(check = new JCheckBox());
add(label = new JLabel(""));
check.setBackground(UIManager.getColor("Tree.textBackground"));
}

/**
* 現在のツリーセルの値を value に設定します。
*/
public Component getTreeCellRendererComponent(JTree tree,Object value,
boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus){
TreeNode node = (TreeNode)value;
label.setText(node.toString());
label.setForeground(Color.black);
check.setVisible(true);

Icon icon = null;

if (条件を入れる) {
if(!leaf)
icon = UIManager.getIcon("Tree.openIcon");

check.setSelected(true);
}
else {
check.setSelected(false);
}
label.setIcon(icon);
return this;
}

/**
* @return セルのサイズを返します。
*/
public Dimension getPreferredSize() {
Dimension d_check = new Dimension(0,0);
if (check.isVisible())
d_check = check.getPreferredSize();
Dimension d_label = label.getPreferredSize();
return new Dimension(d_check.width + d_label.width,
(d_check.height < d_label.height ? d_label.height : d_check.height));
}

/**
* セルのレイアウトを設定します。
*/
public void layout() {
Dimension d_check = new Dimension(0,0);
if (check.isVisible())
d_check = check.getPreferredSize();
Dimension d_label = label.getPreferredSize();
int y_check = 0;
int y_label = 0;
if (d_check.height < d_label.height) {
y_check = (d_label.height - d_check.height)/2;
} else {
y_label = (d_check.height - d_label.height)/2;
}
if (check.isVisible()) {
check.setLocation(0,y_check);
check.setBounds(0,y_check,d_check.width,d_check.height);
}
label.setLocation(d_check.width,y_label);
label.setBounds(d_check.width,y_label,d_label.width,d_label.height);
}

/**
* 背景色を設定します。
*
* @param color 背景色
*/
public void setBackground(Color color) {
if (color instanceof ColorUIResource)
color = null;
super.setBackground(color);
}

}