Set a column width of JTable according to the text in a header

前端 未结 3 1168
感动是毒
感动是毒 2020-12-19 22:51

I need to get an appropriate table size according to a text in a header. It contains abbreviations of czech names of days like: \"Po\", \"Út\", \"St\", atc. but instead of t

3条回答
  •  鱼传尺愫
    2020-12-19 23:05

    This is fantastic code to auto-fit your header and cell content in the JTable:

    jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF );
    
    for (int column = 0; column < jTable1.getColumnCount(); column++){
        TableColumn tableColumn = jTable1.getColumnModel().getColumn(column);
        int preferredWidth = tableColumn.getMinWidth();
        int maxWidth = 0;
        TableCellRenderer rend = jTable1.getTableHeader().getDefaultRenderer();
        TableCellRenderer rendCol = tableColumn.getHeaderRenderer();
        if (rendCol == null) rendCol = rend;
        Component header = rendCol.getTableCellRendererComponent(jTable1, tableColumn.getHeaderValue(), false, false, 0, column);
        maxWidth = header.getPreferredSize().width;
        System.out.println("maxWidth :"+maxWidth);
    
        for (int row = 0; row < jTable1.getRowCount(); row++){
            TableCellRenderer cellRenderer = jTable1.getCellRenderer(row, column);
            Component c = jTable1.prepareRenderer(cellRenderer, row, column);
            int width = c.getPreferredSize().width + jTable1.getIntercellSpacing().width;
            preferredWidth = Math.max(preferredWidth, width);
            System.out.println("preferredWidth :"+preferredWidth);
            System.out.println("Width :"+width);
    
            //  We've exceeded the maximum width, no need to check other rows
    
            if (preferredWidth <= maxWidth){
                preferredWidth = maxWidth;
                break;
            }
        }
        tableColumn.setPreferredWidth(preferredWidth);
    }
    

提交回复
热议问题