One first question:
Can someone give me a mailing list address for simple generic questions?
In the folowing of the question of yesterday "JTree with JCheckBox". I need
to repaint the tree if I check or uncheck the JCheckBox. I'm doing
"tree.invalidate();" but seems that don't work.
What to do in this case?
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.SpringLayout;
import javax.swing.border.Border;
import javax.swing.event.CellEditorListener;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
public class JTreeWithCheckBox extends JTree {
Map m_mapSelectedMap = new HashMap();
public JTreeWithCheckBox() {
TreeWithCheckBoxCell tr = new TreeWithCheckBoxCell();
setEditable(true);
setCellRenderer(tr); //set our custom renderer
setCellEditor(tr); //set our custom editor
}
static class CheckChild {
private Map m_mapSelectedMap = new HashMap();
private boolean m_isChecked;
public CheckChild(boolean isChecked) {
m_isChecked = isChecked;
}
public boolean isChecked() {
return m_isChecked;
}
public Map getSelectedMap() {
return m_mapSelectedMap;
}
}
static private boolean _isSelected(Object[] path, Map mapSelectedMap,
int nIndex) {
if ((nIndex < path.length) &&
(mapSelectedMap.containsKey(path[nIndex]))) {
CheckChild ckcThis =
((CheckChild)mapSelectedMap.get(path[nIndex]));
if (nIndex+1 == path.length) {
return ckcThis.isChecked();
} else if (ckcThis.getSelectedMap().containsKey(path[nIndex+1]))
{
return _isSelected(path, ckcThis.getSelectedMap(),
nIndex+1);
} else {
return ckcThis.isChecked();
}
} else {
return false;
}
}
boolean isSelected(TreePath path) {
if (path == null) {
return false;
} else {
return _isSelected(path.getPath(), m_mapSelectedMap, 0);
}
}
private void _setSelected(Object[] path, Map mapSelectedMap, int nIndex,
boolean isSelected){
if (nIndex < path.length) {
if (nIndex+1 == path.length) {
mapSelectedMap.put(path[nIndex], new
CheckChild(isSelected));
} else {
if (! mapSelectedMap.containsKey(path[nIndex])) {
mapSelectedMap.put(path[nIndex], new CheckChild(false));
}
_setSelected(path,
((CheckChild)mapSelectedMap.get(path[nIndex])).getSelectedMap(), nIndex+1,
isSelected);
}
}
}
void setSelected(TreePath path, boolean isSelected){
_setSelected(path.getPath(), m_mapSelectedMap, 0, isSelected);
}
class TreeWithCheckBoxCell implements TreeCellRenderer, TreeCellEditor {
DefaultTreeCellRenderer m_dtcr = new DefaultTreeCellRenderer();
public Component getTreeCellComponent(final JTree tree, Object
value, boolean isSelected, boolean expanded, boolean leaf, int nRow, boolean
hasFocus) {
System.out.println("Creating: "+value);
Icon icon;
if (leaf) {
icon = m_dtcr.getLeafIcon();
} else if (expanded) {
icon = m_dtcr.getOpenIcon();
} else {
icon = m_dtcr.getClosedIcon();
}
Color clrText;
Color clrBackground;
Border border = null;
if (isSelected){
clrText = m_dtcr.getTextSelectionColor();
clrBackground = m_dtcr.getBackgroundSelectionColor();
border = getBorder();
} else {
clrText = m_dtcr.getTextNonSelectionColor();
clrBackground = m_dtcr.getBackgroundNonSelectionColor();
}
final JPanel pnl = new JPanel();
JCheckBox cb = new JCheckBox();
cb.setForeground(clrText);
cb.setBackground(clrBackground);
final TreePath path = tree.getPathForRow(nRow);
cb.setSelected(isSelected(path));
cb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JCheckBox cb = (JCheckBox)ae.getSource();
setSelected(path, cb.isSelected());
tree.invalidate();
pnl.invalidate();
cb.invalidate();
}
});
JLabel label = new JLabel(value.toString(), icon,
m_dtcr.getHorizontalAlignment());
label.setForeground(clrText);
label.setBackground(clrBackground);
if (border != null) {
label.setBorder(border);
}
pnl.setBackground(clrBackground);
pnl.setLayout(new SpringLayout());
pnl.add(cb);
pnl.add(label);
SpringUtilities.makeCompactGrid(pnl, 1, 2);
return pnl;
}
public Component getTreeCellRendererComponent(JTree tree, Object
objValue, boolean isSelected, boolean isExpanded, boolean inLeaf, int nRow,
boolean hasFocus) {
return getTreeCellComponent(tree, objValue, isSelected,
isExpanded, inLeaf, nRow, hasFocus);
}
public Component getTreeCellEditorComponent(JTree tree, Object
objValue, boolean isSelected, boolean isExpanded, boolean inLeaf, int nRow)
{
return getTreeCellComponent(tree, objValue, true, isExpanded,
inLeaf, nRow, true);
}
public void addCellEditorListener(CellEditorListener l) {
}
public void cancelCellEditing() {
}
public Object getCellEditorValue() {
return this;
}
public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
MouseEvent mevt = (MouseEvent) evt;
if (mevt.getClickCount() == 1) {
return true;
}
}
return false;
}
public void removeCellEditorListener(CellEditorListener l) { }
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
public boolean stopCellEditing() {
return false;
}
}
}
_______________________________________________
Advanced-swing mailing list
[EMAIL PROTECTED]
http://eos.dk/mailman/listinfo/advanced-swing