JAVA JTable数据模型列名称错误
我几乎有下面的“示例”代码,但在大约2小时的编码后,列名就消失了,我找不到位置。 有人能告诉我为什么数据模型不向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
导入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;
}
}