我们常用到类似下面的表格按处室 平均分 问题个数  错误百分比
一处 null     null    null
二处 null     null    null
三处 null     null    null
总结 null     null    null可是JTable好像只能把表头做到最上面把。那这样只能把上表中的“一处”“二处”“三处”“总结”放到Object[][] rowData中去了,运行出来不能达到让上面一排和左边一排都是表头的效果。请问如何做,另外请问如果只能有一个表头想把表头做到左边去,不要在上方出现,可以吗?

解决方案 »

  1.   


    import java.awt.*;
    import java.awt.Dimension;
    import javax.swing.*;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JViewport;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableModel;import java.lang.Math;public class FixedTable
    {
    public static void main(String args[])
    {
    int i,j;
    int rowNum=50;
    int colNum=rowNum+1;
    final Object[][] rowData = new Object[rowNum][colNum];
    for(i=0;i<rowNum;i++)
    {
          rowData[i][0]=String.valueOf(i+1);
                  for(j=1;j<colNum;j++)
                  {
                        rowData[i][j]=(int)(100*Math.random());
                  }
            }

    final String[] columnNames = new String[colNum];
    columnNames[0]="#";
    for (j = 1; j < columnNames.length; j++)
            {
    columnNames[j] = String.valueOf(j);
            }

    TableModel fixedColumnModel = new AbstractTableModel()
    {
    public int getColumnCount()
    {
    return 1;
    }

    public String getColumnName(int column)
    {
    return columnNames[column];
    }

    public int getRowCount()
    {
    return rowData.length;
    }

    public Object getValueAt(int row, int column)
    {
    return rowData[row][column];
    }
    };

    TableModel mainModel = new AbstractTableModel()
    {
    public int getColumnCount()
    {
    return columnNames.length-1;
    }

    public String getColumnName(int column)
    {
    return columnNames[column + 1];
    }

    public int getRowCount()
    {
    return rowData.length;
    }

    public Object getValueAt(int row, int column)
    {
    return rowData[row][column + 1];
    }
    };

    JTable fixedTable = new JTable(fixedColumnModel);
    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                    fixedTable.setRowHeight(28);
                    fixedTable.getColumnModel().getColumn(0).setPreferredWidth(28); JTable mainTable = new JTable(mainModel);
    mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    ListSelectionModel model = fixedTable.getSelectionModel();
    mainTable.setSelectionModel(model);
                    mainTable.setRowHeight(28);
                    mainTable.getTableHeader().setFont(new   Font("Times New Roman",0,12));
                    mainTable.getTableHeader().setBackground(new Color(92,88,166));
                    for(j = 0; j < columnNames.length-1; j++)
          {
                         mainTable.getColumnModel().getColumn(j).setPreferredWidth(38);
          }

    JScrollPane scrollPane = new JScrollPane(mainTable);
    Dimension fixedSize = fixedTable.getPreferredSize();

    JViewport viewport = new JViewport();
    viewport.setView(fixedTable);
    viewport.setPreferredSize(fixedSize);
            scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable.getTableHeader());
            scrollPane.setRowHeaderView(viewport);
        
            JFrame frame = new JFrame("Fixed Column Table");
            frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
            frame.setSize(800, 750);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
      

  2.   

    行头跟列头一样的?JAVA里好像没有吧
    上面那个就是把第一列固定下来了,跟表头差不多