说好了这周把那个统计代码的类写好,哎,没想到卡在了JTable的使用上了。挺郁闷的啊...看代码吧:
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;public class TestJTable extends JFrame{
private JTable table;
private DefaultTableModel tableModel;
private JPanel panel;

public TestJTable(){
super("JTable");

String[] tableHeader = {"File Name", "Code Lines", "Comment Lines", "Blank Lines"};

Vector<String> vectorHeader = new Vector<String> ();

for (int i=0; i<tableHeader.length; i++)
vectorHeader.add(tableHeader[i]);

Vector<String> value = new Vector<String> ();

value.add("c.java");
value.add("51");
value.add("10");
value.add("5");

tableModel = new DefaultTableModel(value, vectorHeader); table = new JTable(tableModel); //行高 
table.setRowHeight(25);  
table.setBounds(new Rectangle( 0, 235, 638, 249));
//设置表格列宽
table.getColumn("File Name").setMaxWidth(150);
table.getColumn("Code Lines").setMaxWidth(100);
table.getColumn("Comment Lines").setMaxWidth(100);
table.getColumn("Blank Lines").setMaxWidth(100); //设置表格内部字体
table.setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
//设置表头字体
table.getTableHeader().setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
//设置选择模式,使其能选择一行或多行
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//设置列不可拖动
table.getTableHeader().setReorderingAllowed(false); panel = new JPanel();

panel.add(table);
add(panel, BorderLayout.CENTER);

validate();
setVisible(true);
setSize(300, 200);
}

public static void main(String args[]){
TestJTable test = new TestJTable();
}
}
报的错是:
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
at javax.swing.table.DefaultTableModel.<init>(Unknown Source)
at TestJTable.<init>(TestJTable.java:28)
at TestJTable.main(TestJTable.java:64)
我觉得不应该啊  不就是用两个Vector来构造一个DefaultTableModel嘛  怎么会出错呢...

解决方案 »

  1.   

    这么改不报错了import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;public class TestJTable extends JFrame{
        private JTable table;
        private DefaultTableModel tableModel;
        private JPanel panel;
        
        public TestJTable(){
            super("JTable");
            
            String[] tableHeader = {"File Name", "Code Lines", "Comment Lines", "Blank Lines"};
            
            Vector<String> vectorHeader = new Vector<String> ();
            
            for (int i=0; i<tableHeader.length; i++)
                vectorHeader.add(tableHeader[i]);
            
            Vector<String> value = new Vector<String> ();
            
            value.add("c.java");
            value.add("51");
            value.add("10");
            value.add("5");
            Vector values = new Vector();
            values.add(value);
            
            
            tableModel = new DefaultTableModel(values, vectorHeader);        table = new JTable(tableModel);        //行高 
            table.setRowHeight(25);  
            table.setBounds(new Rectangle( 0, 235, 638, 249));
            //设置表格列宽
            table.getColumn("File Name").setMaxWidth(150);
            table.getColumn("Code Lines").setMaxWidth(100);
            table.getColumn("Comment Lines").setMaxWidth(100);
            table.getColumn("Blank Lines").setMaxWidth(100);        //设置表格内部字体
            table.setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
            //设置表头字体
            table.getTableHeader().setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
            //设置选择模式,使其能选择一行或多行
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            //设置列不可拖动
           // table.getTableHeader().setReorderingAllowed(false);        panel = new JPanel();
            
            panel.add(table);
            add(panel, BorderLayout.CENTER);
            
            validate();
            setVisible(true);
            setSize(300, 200);
        }
        
        public static void main(String args[]){
            TestJTable test = new TestJTable();                
        }
    }
      

  2.   

            setVisible(true);
            setSize(300, 200); setVisible(true);一般放到最后,
    你把上面两句交换一下试试
      

  3.   

    package mathGame;import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Rectangle;
    import java.util.Vector;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.table.DefaultTableModel;public class TestJTable extends JFrame{
        private JTable table;
        private DefaultTableModel tableModel;
        private JPanel panel;
        
        public TestJTable(){
            super("JTable");
            
            String[] tableHeader = {"File Name", "Code Lines", "Comment Lines", "Blank Lines"};
            
            Vector<String> vectorHeader = new Vector<String> ();
            
            for (int i=0; i<tableHeader.length; i++)
                vectorHeader.add(tableHeader[i]);
            
            Vector<String> value = new Vector<String> ();
            
            value.add("c.java");
            value.add("51");
            value.add("10");
            value.add("5");
            
            Vector values=new Vector();
            values.add(value);
            
            
            
            tableModel = new DefaultTableModel(values, vectorHeader);        table = new JTable(tableModel);
            System.out.println(table.getColumnCount());        //行高 
            table.setRowHeight(25);  
            table.setBounds(new Rectangle( 0, 235, 638, 249));
            //设置表格列宽
            table.getColumn("File Name").setMaxWidth(150);
            table.getColumn("Code Lines").setMaxWidth(100);
            table.getColumn("Comment Lines").setMaxWidth(100);
            table.getColumn("Blank Lines").setMaxWidth(100);        //设置表格内部字体
            table.setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
            //设置表头字体
            table.getTableHeader().setFont(new java.awt.Font("Serif", Font.PLAIN, 14));
            //设置选择模式,使其能选择一行或多行
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            //设置列不可拖动
            table.getTableHeader().setReorderingAllowed(false);        JScrollPane s = new JScrollPane(table);
            panel = new JPanel();
            
            
            panel.add(s);
            add(panel);
            
          //  validate();
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 200);
            
            setVisible(true);
        }
        
        public static void main(String args[]){
            TestJTable test = new TestJTable();                
        }
    }
      

  4.   

    在panel.add(table);之前加入下面这一句:
    panel.add(table.getTableHeader());
      

  5.   

    我这样用的成功了,不知对你是否有帮助?
    List list = com.tj.snow.dao.DaoFactory.getInstance()
    .getStudentDao().getStudents("");
    Vector vectorTable = GuiUtils.list2Vector(list); Vector vectorHead = GuiUtils.getFields(list);
    TableModel mainTableModel = new DefaultTableModel(
    vectorTable, vectorHead);

    mainTable = new JTable();
    mainTable.setEnabled(false);
    JScrollPane scrollpane = new JScrollPane(mainTable);
    mainPanel.add(scrollpane);
    mainTable.setModel(mainTableModel);