Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA JTable数据模型列名称错误_Java_Swing_Jtable_Datamodel - Fatal编程技术网

JAVA JTable数据模型列名称错误

JAVA JTable数据模型列名称错误,java,swing,jtable,datamodel,Java,Swing,Jtable,Datamodel,我几乎有下面的“示例”代码,但在大约2小时的编码后,列名就消失了,我找不到位置。 有人能告诉我为什么数据模型不向JTable添加列名吗? 我的代码: 导入java.awt.BorderLayout; 导入java.awt.Dimension; 导入java.awt.event.ActionEvent; 导入javax.swing.AbstractAction; 导入javax.swing.DefaultListSelectionModel; 导入javax.swing.JButton; 导入j

我几乎有下面的“示例”代码,但在大约2小时的编码后,列名就消失了,我找不到位置。 有人能告诉我为什么数据模型不向JTable添加列名吗?

我的代码:

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.event.ActionEvent;
导入javax.swing.AbstractAction;
导入javax.swing.DefaultListSelectionModel;
导入javax.swing.JButton;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
类MyTableModel扩展了JPanel{
专用静态最终整数检查\u COL=3;
私有静态对象[][]数据={
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},
{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false},{“”,“”,false}
};
公共静态字符串[]列={“Debtid”、“Nev”、“VHO”、“Check”};
受保护的数据模型数据模型=新数据模型(数据、列);
私有JTable表=新JTable(数据模型);
私有默认列表选择模型选择模型;
公共MyTableModel(){
超级(新边框布局());
增加(表);
添加(新控制面板(),BorderLayout.SOUTH);
表.setPreferredScrollableViewportSize(新维度(250175));
selectionModel=(DefaultListSelectionModel)表。getSelectionModel();
}
私有类数据模型扩展了DefaultTableModel{
公共数据模型(对象[][]数据,对象[]列){
超级(数据、列);
}
@凌驾
公共类getColumnClass(int columnIndex){
如果(columnIndex==检查列){
返回getValueAt(0,检查列).getClass();
}
返回super.getColumnClass(columnIndex);
}
@凌驾
公共布尔值可编辑(int行,int列){
返回true;
}
}
私有类控制面板扩展了JPanel{
/**
* 
*/
私有静态最终长serialVersionUID=-7342459414751761853L;
公共控制小组(){
添加(新JLabel(“选择:”);
添加(newjbutton(newselectionAction(“Clear”,false));
添加(newjbutton(newselectionaction(“Check”,true));
}
}
私有类SelectionAction扩展了AbstractAction{
布尔值;
公共选择操作(字符串名称、布尔值){
超级(姓名);
这个值=值;
}
@凌驾
已执行的公共无效操作(操作事件e){
对于(int i=0;i
您需要使用
JScrollPane
包装
JTable
this.add(新的JScrollPane(表))

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

class MyTableModel extends JPanel {

    private static final int CHECK_COL = 3;
    private static  Object[][] DATA = {
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false},
        {"","","",false},{"","","",false},{"","","",false},{"","","",false}
    };
    public static String[] COLUMNS = {"Debtid","Nev","VHO", "Check"};
    protected DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;

    public MyTableModel(){
        super(new BorderLayout());
        this.add(table);
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
    }

    private class DataModel extends DefaultTableModel {

        public DataModel(Object[][] data, Object[] COLUMNS) {
            super(data, COLUMNS);
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            return true;
        }

    }

    private class ControlPanel extends JPanel {

        /**
         * 
         */
        private static final long serialVersionUID = -7342459414751761853L;

        public ControlPanel() {
            this.add(new JLabel("Selection:"));
            this.add(new JButton(new SelectionAction("Clear", false)));
            this.add(new JButton(new SelectionAction("Check", true)));
        }
    }

    private class SelectionAction extends AbstractAction {

        boolean value;

        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {

                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }



    public void setValueAt_Cell(String val, int row, int col) {
        // TODO Auto-generated method stub
        if(row==DATA.length){
            DATA=cloneArray(DATA);
        }
        dataModel.setValueAt(val, row, col);
    }

    public static Object[][] cloneArray(Object[][] src) {
        int length = src.length;
        Object[][] target = new Object[length+1][src[0].length];
        for (int i = 0; i < length; i++) {
            System.arraycopy(src[i], 0, target[i], 0, src[i].length);
        }
        target[length] = new Object[]{"","","",false};
        return target;
    }

    public String getValAtPos(int row,int col) {
        //System.out.println(dataModel.getValueAt(row, col));
        return dataModel.getValueAt(row, col).toString();
    }

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