static void setTableWidth(JTable table){  //adjust table width appropriately
ClientFriendTableModel model = (ClientFriendTableModel)table.getModel();
        TableColumn column = null;
        Component comp = null;
        int headerWidth = 0;
        int cellWidth = 0;
        Object[] longValues = model.longValues;
        TableCellRenderer headerRenderer =
            table.getTableHeader().getDefaultRenderer();        for (int i = 0; i < 9; i++) {
            column = table.getColumnModel().getColumn(i);
            /*column.sizeWidthToFit();*/
            comp = headerRenderer.getTableCellRendererComponent(       这是什么意思呀
                                 null, column.getHeaderValue(),
                                 false, false, 0, 0);
            headerWidth = comp.getPreferredSize().width;           这是什么意思,谢            comp = table.getDefaultRenderer(model.getColumnClass(i)).   这是什么意思
                             getTableCellRendererComponent(
                                 table, longValues[i],
                                 false, false, 0, i);
            cellWidth = comp.getPreferredSize().width;      这是什么意思            column.setPreferredWidth(Math.max(headerWidth, cellWidth));     这是什么意思
        }
}TableColumn column = null;
        Component comp = null;
这二个方法是什么意思呀,请告诉我,谢谢;

解决方案 »

  1.   

    这个是你应该做的,查jdk文档
      

  2.   

    static void setTableWidth(JTable table){  //adjust table width appropriately
        ClientFriendTableModel model = 
            (ClientFriendTableModel)table.getModel();
        TableColumn column = null;
        Component comp = null;
        int headerWidth = 0;
        int cellWidth = 0;
        Object[] longValues = model.longValues;    TableCellRenderer headerRenderer =
            table.getTableHeader().getDefaultRenderer();    for (int i = 0; i < 9; i++) {
            column = table.getColumnModel().getColumn(i);
            /*column.sizeWidthToFit();*/        /**
             * JTable中的每个格子的显示是由TableCellRenderer实现的。
             * headerRenderer的实际类型是UIResourceTableCellRenderer,
             * 一个TableCellRenderer接口的实现类。
             *
             * getTableCellRendererComponent的返回对象是其自身
             *
             * 当前的调用给headerRender设置标题,我估计底层机制会根据设定的String
             * 来确定出headerRender的尺寸
             */
            comp = headerRenderer.getTableCellRendererComponent(       //这是什么意思呀
                null,                        // 如果不是null,本方法会设置背景色、前景色和Border。
                column.getHeaderValue(),    // 栏目标题,一般情况是String
                false,                        // 是否选中
                false,                        // 是否获得焦点
                0,                            // row
                0                            // column
                    );        /**
             * getPreferredSize()得到comp的初始尺寸
             * 返回值是一个Dimension对象
             * Dimension对象有两个属性值,height,width
             */
            headerWidth = comp.getPreferredSize().width;           //这是什么意思,谢        /**
             * model的类型是ClientFriendTableModel,应该是TableModel的实现类。
             * model.getColumnClass(i)得到table中第i列的值的类型
             *
             * table.getDefaultRenderer根据column的值类型,给出默认的显示部件,
             * 比如,对于String、Number,可能使用JLabel、JTextField等JTextComponent
             *      对于Boolean可能使用JCheckBox
             */
            comp = table.getDefaultRenderer(model.getColumnClass(i)).   //这是什么意思
            getTableCellRendererComponent(
                table, longValues[i],
                false, false, 0, i);        /**
             * 同headerWidth = comp.getPreferredSize().width;
             * 这里得到的cell的宽度
             */
            cellWidth = comp.getPreferredSize().width;      // 这是什么意思        /**
             * 设定column的初始宽度。
             *
             * 到这里应该清楚了。比较前面获得的headerWidth和cellWidth,取其中的最大值。
             *
             */
            column.setPreferredWidth(Math.max(headerWidth, cellWidth));     //这是什么意思
        }
    }TableColumn column = null;
    Component comp = null;
      

  3.   

    同意zhkchi(火焰神)的观点,最好自己看API Spec,以及jsdk源代码。不过,如果你大二以下,可以给你解释。