注册 登录
编程论坛 JAVA论坛

关于Jtable的一个问题,想不出哪里出错。求解

LHH744168227 发布于 2015-05-25 22:34, 452 次点击
先献上代码:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

@SuppressWarnings("serial")
public class ArrayCreateTable extends JFrame {
    JTable table;
    JScrollPane scrollPane;
    public ArrayCreateTable() {
        // TODO Auto-generated constructor stub
        scrollPane = new JScrollPane(this.getable(),
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        this.add(scrollPane);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    private JTable getable() {
        if (table == null) {
            table = new JTable();// 建立表格
            // 定义列名数组
            String[] columns = { "ID", "姓名", "性别", "出生地", "出生日期", "邮箱", "居住地",
                    "备注" };
            // 定义列宽数组
            int columnWidth[] = { 10, 30, 10, 40, 70, 60, 70 };
            // 创建表格数据模型
            DefaultTableModel model = new DefaultTableModel(columns, 15);// columns存放列名称的数组,生成15行空白数据
            table.setModel(model);// 设置表格的数据模型
            TableColumnModel columnModel = table.getColumnModel();// 获取列模型
            int count = columnModel.getColumnCount();// 获取列的数量
            for (int i = 0; i < count; i++) {
                TableColumn column = columnModel.getColumn(i);// 获取列对象
                column.setPreferredWidth(columnWidth[i]);// 以数组元素来设置列宽
            }
        }
        return table;
    }
    public static void main(String[] args) {
        new ArrayCreateTable();
    }
}
运行不了错误信息如下:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at L300.ArrayCreateTable.getable(ArrayCreateTable.java:39)
    at L300.ArrayCreateTable.<init>(ArrayCreateTable.java:16)
    at L300.ArrayCreateTable.main(ArrayCreateTable.java:45)


我发现如果把  column.setPreferredWidth(columnWidth[i]);// 以数组元素来设置列宽  
改为column.setPreferredWidth(10);就没有问题。
希望得到帮助~不禁感激。
2 回复
#2
lianren8792015-05-26 00:57
columns长度是8
columnWidth[]长度是7
然后就越界了
#3
LHH7441682272015-05-26 12:42
回复 2楼 lianren879
谢谢~确实是这个问题。我是模仿书本的代码写的,没留意到书本会出错。十分感谢
1