JTable的问题,基本快崩溃了...

justinavril 2008-09-07 03:30:38
说好了这周把那个统计代码的类写好,哎,没想到卡在了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嘛 怎么会出错呢...
...全文
174 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonegreen72 2009-02-13
  • 打赏
  • 举报
回复
我这样用的成功了,不知对你是否有帮助?
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);
huoyin 2008-09-07
  • 打赏
  • 举报
回复
在panel.add(table);之前加入下面这一句:
panel.add(table.getTableHeader());
脚跟着地 2008-09-07
  • 打赏
  • 举报
回复
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();
}
}
justinavril 2008-09-07
  • 打赏
  • 举报
回复
顶起来啊 没解决呢...
justinavril 2008-09-07
  • 打赏
  • 举报
回复
回3#:

可以显示出表了 谢谢!
但是表头仍然显示不了 不知道为什么
qingkangxu 2008-09-07
  • 打赏
  • 举报
回复
        setVisible(true);
setSize(300, 200);


setVisible(true);一般放到最后,
你把上面两句交换一下试试
justinavril 2008-09-07
  • 打赏
  • 举报
回复
回2#:

但是仍然有问题 就是表头无法显示 而且表的内容如果不拖动对话框的话 无法显示
mayuanfei 2008-09-07
  • 打赏
  • 举报
回复
这么改不报错了

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();
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧