Patch from Chris Oliver:
Hi Norris, Can you check in the attached Main.java which works around a problem with using JTreeTable in JDK 1.4. Thanks, Chris git-svn-id: svn://10.0.0.236/trunk@117878 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1143,41 +1143,90 @@ class Evaluator extends JTable {
|
||||
|
||||
class MyTreeTable extends JTreeTable {
|
||||
|
||||
public MyTreeTable(TreeTableModel model) {
|
||||
super(model);
|
||||
}
|
||||
public MyTreeTable(TreeTableModel model) {
|
||||
super(model);
|
||||
}
|
||||
|
||||
public JTree resetTree(TreeTableModel treeTableModel) {
|
||||
tree = new TreeTableCellRenderer(treeTableModel);
|
||||
|
||||
// Install a tableModel representing the visible rows in the tree.
|
||||
super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
|
||||
|
||||
// Force the JTable and JTree to share their row selection models.
|
||||
ListToTreeSelectionModelWrapper selectionWrapper = new
|
||||
ListToTreeSelectionModelWrapper();
|
||||
tree.setSelectionModel(selectionWrapper);
|
||||
setSelectionModel(selectionWrapper.getListSelectionModel());
|
||||
|
||||
// Make the tree and table row heights the same.
|
||||
if (tree.getRowHeight() < 1) {
|
||||
// Metal looks better like this.
|
||||
setRowHeight(18);
|
||||
}
|
||||
|
||||
public JTree resetTree(TreeTableModel treeTableModel) {
|
||||
tree = new TreeTableCellRenderer(treeTableModel);
|
||||
|
||||
// Install a tableModel representing the visible rows in the tree.
|
||||
super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
|
||||
|
||||
// Force the JTable and JTree to share their row selection models.
|
||||
ListToTreeSelectionModelWrapper selectionWrapper = new
|
||||
ListToTreeSelectionModelWrapper();
|
||||
tree.setSelectionModel(selectionWrapper);
|
||||
setSelectionModel(selectionWrapper.getListSelectionModel());
|
||||
|
||||
// Make the tree and table row heights the same.
|
||||
if (tree.getRowHeight() < 1) {
|
||||
// Metal looks better like this.
|
||||
setRowHeight(18);
|
||||
// Install the tree editor renderer and editor.
|
||||
setDefaultRenderer(TreeTableModel.class, tree);
|
||||
setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
|
||||
setShowGrid(true);
|
||||
setIntercellSpacing(new Dimension(1,1));
|
||||
tree.setRootVisible(false);
|
||||
tree.setShowsRootHandles(true);
|
||||
DefaultTreeCellRenderer r = (DefaultTreeCellRenderer)tree.getCellRenderer();
|
||||
r.setOpenIcon(null);
|
||||
r.setClosedIcon(null);
|
||||
r.setLeafIcon(null);
|
||||
return tree;
|
||||
}
|
||||
|
||||
// Install the tree editor renderer and editor.
|
||||
setDefaultRenderer(TreeTableModel.class, tree);
|
||||
setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
|
||||
setShowGrid(true);
|
||||
setIntercellSpacing(new Dimension(1,1));
|
||||
tree.setRootVisible(false);
|
||||
tree.setShowsRootHandles(true);
|
||||
DefaultTreeCellRenderer r = (DefaultTreeCellRenderer)tree.getCellRenderer();
|
||||
r.setOpenIcon(null);
|
||||
r.setClosedIcon(null);
|
||||
r.setLeafIcon(null);
|
||||
return tree;
|
||||
}
|
||||
public boolean isCellEditable(EventObject e) {
|
||||
if (e instanceof MouseEvent) {
|
||||
MouseEvent me = (MouseEvent)e;
|
||||
// If the modifiers are not 0 (or the left mouse button),
|
||||
// tree may try and toggle the selection, and table
|
||||
// will then try and toggle, resulting in the
|
||||
// selection remaining the same. To avoid this, we
|
||||
// only dispatch when the modifiers are 0 (or the left mouse
|
||||
// button).
|
||||
if (me.getModifiers() == 0 ||
|
||||
((me.getModifiers() & (InputEvent.BUTTON1_MASK|1024)) != 0 &&
|
||||
(me.getModifiers() &
|
||||
(InputEvent.SHIFT_MASK |
|
||||
InputEvent.CTRL_MASK |
|
||||
InputEvent.ALT_MASK |
|
||||
InputEvent.BUTTON2_MASK |
|
||||
InputEvent.BUTTON3_MASK |
|
||||
64 | //SHIFT_DOWN_MASK
|
||||
128 | //CTRL_DOWN_MASK
|
||||
512 | // ALT_DOWN_MASK
|
||||
2048 | //BUTTON2_DOWN_MASK
|
||||
4096 //BUTTON3_DOWN_MASK
|
||||
)) == 0)) {
|
||||
int row = rowAtPoint(me.getPoint());
|
||||
for (int counter = getColumnCount() - 1; counter >= 0;
|
||||
counter--) {
|
||||
if (TreeTableModel.class == getColumnClass(counter)) {
|
||||
MouseEvent newME = new MouseEvent
|
||||
(MyTreeTable.this.tree, me.getID(),
|
||||
me.getWhen(), me.getModifiers(),
|
||||
me.getX() - getCellRect(row, counter, true).x,
|
||||
me.getY(), me.getClickCount(),
|
||||
me.isPopupTrigger());
|
||||
MyTreeTable.this.tree.dispatchEvent(newME);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (me.getClickCount() >= 3) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (e == null) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class ContextWindow extends JPanel implements ActionListener {
|
||||
|
||||
Reference in New Issue
Block a user