Hi Alex,

Because of ULC's lazy loading feature it need's two round trips to upload the (visible part of the) table tree:
1. the round trip where your application uploads the table tree
2. the round trip where ULC uploads the visible data of the table tree

The second round trip is necessary because the visible part of the table tree can only be calculated on the client-side. Therefore you should expand the column widths at the end of the second round trip and not at the end of the first one. Note that the default behavior is to upload only the visible data in the second round trip. If you want to upload all table tree data at once you should set the "disableLazyLoading" client property to true.

The snippet at the end of my mail shows the enhanced solution.

Regards Dany




import java.awt.Component;

import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

import com.ulcjava.base.application.AbstractAction;
import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ApplicationContext;
import com.ulcjava.base.application.ULCBorderLayoutPane;
import com.ulcjava.base.application.ULCButton;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCListSelectionModel;
import com.ulcjava.base.application.ULCProxy;
import com.ulcjava.base.application.ULCScrollPane;
import com.ulcjava.base.application.ULCTableTree;
import com.ulcjava.base.application.event.ActionEvent;
import com.ulcjava.base.application.event.IRoundTripListener;
import com.ulcjava.base.application.event.ITreeExpansionListener;
import com.ulcjava.base.application.event.RoundTripEvent;
import com.ulcjava.base.application.event.TreeExpansionEvent;
import com.ulcjava.base.application.tabletree.AbstractTableTreeModel;
import com.ulcjava.base.client.UIProxy;
import com.ulcjava.base.client.UITableTree;
import com.ulcjava.base.client.tabletree.TableTreeTree;
import com.ulcjava.base.development.ConnectionType;
import com.ulcjava.base.development.DevelopmentRunner;

public class ExpandTableTreeColumns extends AbstractApplication {
   public void start() {
ULCTableTree tableTree = new ULCTableTree(new SnippetTableTreeModel()); tableTree.getColumnModel().getSelectionModel().setSelectionMode(ULCListSelectionModel.SINGLE_SELECTION);
       tableTree.setAutoResizeMode(ULCTableTree.AUTO_RESIZE_OFF);
       tableTree.setRowSelectionAllowed(false);
       tableTree.setColumnSelectionAllowed(true);
tableTree.addTreeExpansionListener(new ExpandTreeColumnAction(tableTree));
       tableTree.putClientProperty("disableLazyLoading", Boolean.TRUE);

       ULCFrame frame = new ULCFrame("Snippet");
       frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
       frame.getContentPane().add(new ULCScrollPane(tableTree));
frame.getContentPane().add(new ULCButton(new ExpandSelectedColumnAction(tableTree)), ULCBorderLayoutPane.SOUTH);
       frame.pack();
       frame.setVisible(true);

       for (int i = 150; i < 160; i++) {
           tableTree.expandRow(i);
       }
ApplicationContext.addRoundTripListener(new LazyLoadingExpandAction(tableTree));
   }

   public static void main(String[] args) {
       DevelopmentRunner.setApplicationClass(ExpandTableTreeColumns.class);
       DevelopmentRunner.setConnectionType(ConnectionType.MODEM28K);
       DevelopmentRunner.main(args);
   }

   public static class ExpandSelectedColumnAction extends AbstractAction {
       private ULCTableTree fTableTree;

       public ExpandSelectedColumnAction(ULCTableTree tableTree) {
           fTableTree = tableTree;

           setEnabler(fTableTree.getColumnModel().getSelectionModel());
           putValue(NAME, "Expand Selected Column");
       }

       public void actionPerformed(ActionEvent event) {
ULCSnippetHelper.getInstance().expandTableTreeColumn(fTableTree, fTableTree.getSelectedColumn());
       }
   }

public static class ExpandTreeColumnAction implements ITreeExpansionListener {
       private final ULCTableTree fTableTree;

       public ExpandTreeColumnAction(ULCTableTree tableTree) {
           fTableTree = tableTree;
       }

       public void treeCollapsed(TreeExpansionEvent event) {
       }

       public void treeExpanded(TreeExpansionEvent event) {
           int treeColumn = fTableTree.getModel().getTreeColumn();
ULCSnippetHelper.getInstance().expandTableTreeColumn(fTableTree, treeColumn);
       }
   }

public static class LazyLoadingExpandAction implements IRoundTripListener {
       private final ULCTableTree fTableTree;

       private int fRoundTripCount;

       public LazyLoadingExpandAction(ULCTableTree tableTree) {
           fTableTree = tableTree;
           fRoundTripCount = 0;
       }

       public void roundTripDidStart(RoundTripEvent event) {
       }

       public void roundTripWillEnd(RoundTripEvent event) {
           fRoundTripCount++;

           if (fRoundTripCount == 2) {
               for (int i = 0; i < fTableTree.getColumnCount(); i++) {
ULCSnippetHelper.getInstance().expandTableTreeColumn(fTableTree, i);
               }

               ApplicationContext.removeRoundTripListener(this);
           }
       }
   }

   public static class ULCSnippetHelper extends ULCProxy {
private static final String INSTANCE_KEY = ULCSnippetHelper.class.getName() + ".INSTANCE";

       private ULCSnippetHelper() {
           upload();
           markUncollectable();
       }

       public static ULCSnippetHelper getInstance() {
ULCSnippetHelper result = (ULCSnippetHelper) ApplicationContext.getAttribute(INSTANCE_KEY);
           if (result == null) {
               result = new ULCSnippetHelper();
               ApplicationContext.setAttribute(INSTANCE_KEY, result);
           }

           return result;
       }

public void expandTableTreeColumn(ULCTableTree tableTree, int column) { invokeUI("expandTableTreeColumn", new Object[] { tableTree, new Integer(column) });
       }

       protected String typeString() {
           return UISnippetHelper.class.getName();
       }
   }

   public static class UISnippetHelper extends UIProxy {
public void expandTableTreeColumn(UITableTree tableTree, int resizingColumnIndex) { final JTable basicTable = tableTree.getBasicTableTree().getBasicTable(); TableColumn resizingColumn = basicTable.getColumnModel().getColumn(resizingColumnIndex);

// set the table column's width as if the user is resizing a table
           // column by mouse
           // -> BaiscTableHeaderUI.MouseInputHandler and JTable.doLayout()
           basicTable.getTableHeader().setResizingColumn(resizingColumn);
resizingColumn.setWidth(toPreferredWidth(tableTree, resizingColumnIndex));
           SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                   basicTable.getTableHeader().setResizingColumn(null);
               }
           });
       }

private static int toPreferredWidth(UITableTree tableTree, int columnIndex) { TableTreeTree basicTree = (TableTreeTree) tableTree.getBasicTableTree().getBasicTree(); JTable basicTable = tableTree.getBasicTableTree().getBasicTable(); TableColumn column = basicTable.getColumnModel().getColumn(columnIndex);

           int result = column.getMinWidth();
           for (int i = 0; i < basicTable.getRowCount(); i++) {
TableCellRenderer renderer = getCellRenderer(basicTable, i, columnIndex); Component component = basicTable.prepareRenderer(renderer, i, columnIndex);
               int preferredWidth = component.getPreferredSize().width;

               // consider tree handle and icon for the tree column
               if (isTreeColumn(tableTree, columnIndex)) {
                   preferredWidth += basicTree.getTableCellOffset(i);
               }

               result = Math.max(result, preferredWidth);
           }

           result += basicTable.getColumnModel().getColumnMargin();

           return Math.min(result, column.getMaxWidth());
       }

private static boolean isTreeColumn(UITableTree tableTree, int columnIndex) { JTable basicTable = tableTree.getBasicTableTree().getBasicTable(); return basicTable.convertColumnIndexToModel(columnIndex) == tableTree.getBasicTableTree().getModel()
                   .getTreeColumn();
       }

// we can't use TableTreeTable's getCellRenderer method as this one is
       // overwritten
       // -> copy & pasted code from JTable.getCellRenderer()
private static TableCellRenderer getCellRenderer(JTable table, int row, int column) { TableColumn tableColumn = table.getColumnModel().getColumn(column);
           TableCellRenderer result = tableColumn.getCellRenderer();
           if (result == null) {
result = table.getDefaultRenderer(table.getColumnClass(column));
           }
           return result;
       }
   }

public static class SnippetTableTreeModel extends AbstractTableTreeModel {
       public boolean isLeaf(Object node) {
           return false;
       }

       public Object getValueAt(Object node, int column) {
           return node.toString() + ":" + column;
       }

       public Object getRoot() {
           return "root";
       }

       public int getIndexOfChild(Object parent, Object child) {
           String childValue = child.toString();
           int index = childValue.lastIndexOf('.');
           return Integer.parseInt(childValue.substring(index + 1));
       }

       public int getColumnCount() {
           return 3;
       }

       public int getChildCount(Object parent) {
           return parent == getRoot() ? 200 : 4;
       }

       public Object getChild(Object parent, int index) {
           return parent.toString() + "." + index;
       }
   }
}


Stucki Alexander, Bedag wrote:
Hi Dany

Thanks a lot for your solution!!!
It works fine... ...but ;)

1. Because I must show the hole text even if the tree itself is smaller I had 
to set tableTree.setAutoResizeMode(ULCTableTree.AUTO_RESIZE_OFF).
2. I added a TreeExpansionListener to adjust the column if a node is expanded.

So far it's perfect.

But now I can not initialise the column correctly. Because I had to turn off 
AUTO-RESIZE the column is show at the beginning with its default width...
I tried UlcUtilities.invokeLater() and UITableTree.postInitializeState() but 
the column width is even reduced.
Then I tried a IRoundTripListener and there I could not remove the listener 
when tableTree.isUploaded() was true because the width is as well reduced... 
...the RoundTripListener is called twice and then the width is ok. ?-/

When do I know that the UI is completely uploaded during startup?

Thanks a lot!!
Regards
Alex

Here my snippet :
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

import com.ulcjava.base.application.AbstractAction;
import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ApplicationContext;
import com.ulcjava.base.application.ULCBorderLayoutPane;
import com.ulcjava.base.application.ULCButton;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCListSelectionModel;
import com.ulcjava.base.application.ULCProxy;
import com.ulcjava.base.application.ULCScrollPane;
import com.ulcjava.base.application.ULCTableTree;
import com.ulcjava.base.application.event.ActionEvent;
import com.ulcjava.base.application.event.IRoundTripListener;
import com.ulcjava.base.application.event.ITreeExpansionListener;
import com.ulcjava.base.application.event.RoundTripEvent;
import com.ulcjava.base.application.event.TreeExpansionEvent;
import com.ulcjava.base.application.tabletree.AbstractTableTreeModel;
import com.ulcjava.base.application.util.Dimension;
import com.ulcjava.base.client.UIProxy;
import com.ulcjava.base.client.UITableTree;
import com.ulcjava.base.client.tabletree.TableTreeTree;
import com.ulcjava.base.development.DevelopmentRunner;

public class MyExpandTableTreeColumns extends AbstractApplication {

        public void start() {
        final ULCTableTree tableTree = new MyULCTableTree();
        tableTree.setModel(new SnippetTableTreeModel());
        
tableTree.getColumnModel().getSelectionModel().setSelectionMode(ULCListSelectionModel.SINGLE_SELECTION);
        tableTree.setRowSelectionAllowed(false);
        tableTree.setColumnSelectionAllowed(true);
        tableTree.setAutoResizeMode(ULCTableTree.AUTO_RESIZE_OFF);
        tableTree.addTreeExpansionListener(new ITreeExpansionListener(){
                public void treeCollapsed(TreeExpansionEvent arg0) { /* noop */ 
}
                public void treeExpanded(TreeExpansionEvent arg0) {
                if(-1 == tableTree.getSelectedColumn()){
                        tableTree.setColumnSelectionInterval(0,0);
                }
                ULCSnippetHelper.getInstance().expandTableTreeColumn(tableTree,
                                tableTree.getSelectedColumn());
            }
        });

        ApplicationContext.addRoundTripListener(new IRoundTripListener(){
                        public void roundTripDidStart(RoundTripEvent arg0) { /* 
noop */ }
                        public void roundTripWillEnd(RoundTripEvent arg0) {
                                if(tableTree.isUploaded()){
                        if(-1 == tableTree.getSelectedColumn()){
                                tableTree.setColumnSelectionInterval(0,0);
                        }
                        
ULCSnippetHelper.getInstance().expandTableTreeColumn(tableTree,
                                        tableTree.getSelectedColumn());
                                        
System.out.println("roundTripWillEnd...");
//                      ApplicationContext.removeRoundTripListener(this);
                                }
                        }
        });
ULCFrame frame = new ULCFrame("Snippet");
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
        frame.getContentPane().add(new ULCScrollPane(tableTree));
        frame.getContentPane().add(
                new ULCButton(new ExpandSelectedColumnAction(tableTree)),
                ULCBorderLayoutPane.SOUTH);
        frame.pack();
        frame.setSize(new Dimension(200,300));
        frame.setVisible(true);
//init columnwidth
//        UlcUtilities.invokeLater(new Runnable(){
//                      public void run() {
//                              tableTree.setColumnSelectionInterval(0,0);
//                              
ULCSnippetHelper.getInstance().expandTableTreeColumn(tableTree,
//                              tableTree.getSelectedColumn());
//                      }
//        });
    }

    public static void main(String[] args) {
        DevelopmentRunner.setApplicationClass(MyExpandTableTreeColumns.class);
        DevelopmentRunner.main(args);
    }

    public static class MyULCTableTree extends ULCTableTree {
        protected String typeString() {
            return MyUITableTree.class.getName();
        }
    }
public static class MyUITableTree extends UITableTree {
        public void postInitializeState(){
                super.postInitializeState();
//              UISnippetHelper.expandTableTreeColumn(this, 0);
        }
    }
public static class ExpandSelectedColumnAction extends AbstractAction {
        private ULCTableTree fTableTree;

        public ExpandSelectedColumnAction(ULCTableTree tableTree) {
            fTableTree = tableTree;

            setEnabler(fTableTree.getColumnModel().getSelectionModel());
            putValue(NAME, "Expand Selected Column");
        }

        public void actionPerformed(ActionEvent event) {
            ULCSnippetHelper.getInstance().expandTableTreeColumn(fTableTree,
                    fTableTree.getSelectedColumn());
        }
    }

    public static class ULCSnippetHelper extends ULCProxy {
        private static final String INSTANCE_KEY = ULCSnippetHelper.class
                .getName()
                + ".INSTANCE";

        private ULCSnippetHelper() {
            upload();
            markUncollectable();
        }

        public static ULCSnippetHelper getInstance() {
            ULCSnippetHelper result = (ULCSnippetHelper) ApplicationContext
                    .getAttribute(INSTANCE_KEY);
            if (result == null) {
                result = new ULCSnippetHelper();
                ApplicationContext.setAttribute(INSTANCE_KEY, result);
            }

            return result;
        }

        public void expandTableTreeColumn(ULCTableTree tableTree, int column) {
            invokeUI("expandTableTreeColumn", new Object[] { tableTree,
                    new Integer(column) });
        }

        protected String typeString() {
            return UISnippetHelper.class.getName();
        }
    }

    public static class UISnippetHelper extends UIProxy {
        public static void expandTableTreeColumn(UITableTree tableTree,
                int resizingColumnIndex) {
            final JTable basicTable = 
tableTree.getBasicTableTree().getBasicTable();
            TableColumn resizingColumn = basicTable.getColumnModel().getColumn(
                    resizingColumnIndex);

            // set the table column's width as if the user is resizing a table 
column by mouse
            // -> BaiscTableHeaderUI.MouseInputHandler and JTable.doLayout()
            basicTable.getTableHeader().setResizingColumn(resizingColumn);
            resizingColumn.setWidth(toPreferredWidth(tableTree, 
resizingColumnIndex));
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    basicTable.getTableHeader().setResizingColumn(null);
                }
            });
        }

        private static int toPreferredWidth(UITableTree tableTree,
                int columnIndex) {
            TableTreeTree basicTree = (TableTreeTree) tableTree
                    .getBasicTableTree().getBasicTree();
            JTable basicTable = tableTree.getBasicTableTree().getBasicTable();
            TableColumn column = 
basicTable.getColumnModel().getColumn(columnIndex);

            int result = column.getMinWidth();
            for (int i = 0; i < basicTable.getRowCount(); i++) {
                TableCellRenderer renderer = getCellRenderer(basicTable, i,
                        columnIndex);
                Component component = basicTable.prepareRenderer(renderer, i,
                        columnIndex);
                int preferredWidth = component.getPreferredSize().width;
// consider tree handle and icon for the tree column
                if (isTreeColumn(tableTree, columnIndex)) {
                    preferredWidth += basicTree.getTableCellOffset(i);
                }
result = Math.max(result, preferredWidth);
            }

            result += basicTable.getColumnModel().getColumnMargin();

            return Math.min(result, column.getMaxWidth());
        }

        private static boolean isTreeColumn(UITableTree tableTree,
                int columnIndex) {
            JTable basicTable = tableTree.getBasicTableTree().getBasicTable();
            return basicTable.convertColumnIndexToModel(columnIndex) == 
tableTree
                    .getBasicTableTree().getModel().getTreeColumn();
        }

        // we can't use TableTreeTable's getCellRenderer method as this one is 
overwritten
        // -> copy & pasted code from JTable.getCellRenderer()
private static TableCellRenderer getCellRenderer(JTable table, int row,
                                                                                
                     int column) {
            TableColumn tableColumn = table.getColumnModel().getColumn(column);
            TableCellRenderer result = tableColumn.getCellRenderer();
            if (result == null) {
                result = table.getDefaultRenderer(table.getColumnClass(column));
            }
            return result;
        }
    }

    public static class SnippetTableTreeModel extends AbstractTableTreeModel {
        public boolean isLeaf(Object node) {
            return false;
        }

        public Object getValueAt(Object node, int column) {
            return node.toString() + ":" + column;
        }

        public Object getRoot() {
            return "root";
        }

        public int getIndexOfChild(Object parent, Object child) {
            String childValue = child.toString();
            int index = childValue.lastIndexOf('.');
            return Integer.parseInt(childValue.substring(index + 1));
        }

        public int getColumnCount() {
            return 3;
        }

        public int getChildCount(Object parent) {
            return 4;
        }

        public Object getChild(Object parent, int index) {
            return parent.toString() + "." + index;
        }
    }
}




-----Ursprüngliche Nachricht-----
Von: Daniel Grob [mailto:[EMAIL PROTECTED] Gesendet: Dienstag, 19. September 2006 22:39
An: [email protected]; Stucki Alexander, Bedag
Betreff: Re: [ULC-developer] How to expand the columns width of ULCTableTree?

Hi Alex,

This was a hard one for two reasons:
1. In Swing it is difficult to programatically set the width of a column
(?!?)
2. ULC's tree column handling is implemented in a special way

However, you can find a solution at the end of my mail.

Regards Dany


import java.awt.Component;

import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

import com.ulcjava.base.application.AbstractAction;
import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ApplicationContext;
import com.ulcjava.base.application.ULCBorderLayoutPane;
import com.ulcjava.base.application.ULCButton;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCListSelectionModel;
import com.ulcjava.base.application.ULCProxy;
import com.ulcjava.base.application.ULCScrollPane;
import com.ulcjava.base.application.ULCTableTree;
import com.ulcjava.base.application.event.ActionEvent;
import com.ulcjava.base.application.tabletree.AbstractTableTreeModel;
import com.ulcjava.base.client.UIProxy;
import com.ulcjava.base.client.UITableTree;
import com.ulcjava.base.client.tabletree.TableTreeTree;
import com.ulcjava.base.development.DevelopmentRunner;

public class ExpandTableTreeColumns extends AbstractApplication {
    public void start() {
        ULCTableTree tableTree = new ULCTableTree(new SnippetTableTreeModel());
        tableTree.getColumnModel().getSelectionModel().setSelectionMode(
                ULCListSelectionModel.SINGLE_SELECTION);
        tableTree.setRowSelectionAllowed(false);
        tableTree.setColumnSelectionAllowed(true);

        ULCFrame frame = new ULCFrame("Snippet");
        frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
        frame.getContentPane().add(new ULCScrollPane(tableTree));
        frame.getContentPane().add(
                new ULCButton(new ExpandSelectedColumnAction(tableTree)),
                ULCBorderLayoutPane.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        DevelopmentRunner.setApplicationClass(ExpandTableTreeColumns.class);
        DevelopmentRunner.main(args);
    }

    public static class ExpandSelectedColumnAction extends AbstractAction {
        private ULCTableTree fTableTree;

        public ExpandSelectedColumnAction(ULCTableTree tableTree) {
            fTableTree = tableTree;

            setEnabler(fTableTree.getColumnModel().getSelectionModel());
            putValue(NAME, "Expand Selected Column");
        }

        public void actionPerformed(ActionEvent event) {
            ULCSnippetHelper.getInstance().expandTableTreeColumn(fTableTree,
                    fTableTree.getSelectedColumn());
        }
    }

    public static class ULCSnippetHelper extends ULCProxy {
        private static final String INSTANCE_KEY = ULCSnippetHelper.class
                .getName()
                + ".INSTANCE";

        private ULCSnippetHelper() {
            upload();
            markUncollectable();
        }

        public static ULCSnippetHelper getInstance() {
            ULCSnippetHelper result = (ULCSnippetHelper) ApplicationContext
                    .getAttribute(INSTANCE_KEY);
            if (result == null) {
                result = new ULCSnippetHelper();
                ApplicationContext.setAttribute(INSTANCE_KEY, result);
            }

            return result;
        }

        public void expandTableTreeColumn(ULCTableTree tableTree, int
column) {
            invokeUI("expandTableTreeColumn", new Object[] { tableTree,
                    new Integer(column) });
        }

        protected String typeString() {
            return UISnippetHelper.class.getName();
        }
    }

    public static class UISnippetHelper extends UIProxy {
        public void expandTableTreeColumn(UITableTree tableTree,
                int resizingColumnIndex) {
            final JTable basicTable = tableTree.getBasicTableTree()
                    .getBasicTable();
            TableColumn resizingColumn = basicTable.getColumnModel().getColumn(
                    resizingColumnIndex);

            // set the table column's width as if the user is resizing a table 
column by mouse
            // -> BaiscTableHeaderUI.MouseInputHandler and JTable.doLayout()
            basicTable.getTableHeader().setResizingColumn(resizingColumn);
            resizingColumn.setWidth(toPreferredWidth(tableTree,
resizingColumnIndex));
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    basicTable.getTableHeader().setResizingColumn(null);
                }
            });
        }

        private static int toPreferredWidth(UITableTree tableTree,
                int columnIndex) {
            TableTreeTree basicTree = (TableTreeTree) tableTree
                    .getBasicTableTree().getBasicTree();
            JTable basicTable =
tableTree.getBasicTableTree().getBasicTable();
            TableColumn column = basicTable.getColumnModel().getColumn(
                    columnIndex);

            int result = column.getMinWidth();
            for (int i = 0; i < basicTable.getRowCount(); i++) {
                TableCellRenderer renderer = getCellRenderer(basicTable, i,
                        columnIndex);
                Component component =
basicTable.prepareRenderer(renderer, i,
                        columnIndex);
                int preferredWidth = component.getPreferredSize().width;
// consider tree handle and icon for the tree column
                if (isTreeColumn(tableTree, columnIndex)) {
                    preferredWidth += basicTree.getTableCellOffset(i);
                }
result = Math.max(result, preferredWidth);
            }

            result += basicTable.getColumnModel().getColumnMargin();

            return Math.min(result, column.getMaxWidth());
        }

        private static boolean isTreeColumn(UITableTree tableTree,
                int columnIndex) {
            JTable basicTable =
tableTree.getBasicTableTree().getBasicTable();
            return basicTable.convertColumnIndexToModel(columnIndex) == 
tableTree
                    .getBasicTableTree().getModel().getTreeColumn();
        }

        // we can't use TableTreeTable's getCellRenderer method as this one is 
overwritten
        // -> copy & pasted code from JTable.getCellRenderer()
        private static TableCellRenderer getCellRenderer(JTable table, int row,
                int column) {
            TableColumn tableColumn =
table.getColumnModel().getColumn(column);
            TableCellRenderer result = tableColumn.getCellRenderer();
            if (result == null) {
                result =
table.getDefaultRenderer(table.getColumnClass(column));
            }
            return result;
        }
    }

    public static class SnippetTableTreeModel extends AbstractTableTreeModel {
        public boolean isLeaf(Object node) {
            return false;
        }

        public Object getValueAt(Object node, int column) {
            return node.toString() + ":" + column;
        }

        public Object getRoot() {
            return "root";
        }

        public int getIndexOfChild(Object parent, Object child) {
            String childValue = child.toString();
            int index = childValue.lastIndexOf('.');
            return Integer.parseInt(childValue.substring(index + 1));
        }

        public int getColumnCount() {
            return 3;
        }

        public int getChildCount(Object parent) {
            return 4;
        }

        public Object getChild(Object parent, int index) {
            return parent.toString() + "." + index;
        }
    }
}



Hi All

I want to expand the column width of my ULCTableTree according the values of the column cells. The tree is in a ScrollPane and then I tried to figure out the PreferredSize of every cell. I have found an example doing this in a JTable by asking the CellRendererComponent for its PreferredSize.

I tried it on server and on client side without success (missing cellRendererComponent, fix preferredSize of the column, etc).

Does anybody know an example for this problem?
How do I get the best width for a cell value without calculating it myself?

TIA!
Alex

Alex Stucki
Bedag Informatik AG
Software-Entwicklung
Gutenbergstrasse 1
3011 Bern
Telefon:        +41 (0)31 633 21 21 (direkt 633 25 35)
E-Mail:         _mailto:[EMAIL PROTECTED]
_www.bedag.ch_ <file://www.bedag.ch>



_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer


_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer

Reply via email to