Java 向AbstractTableModel的扩展类动态添加数据
我有一些数据是从我的数据库加载的,作为一个公共静态列表存储在另一个类中,,我无法访问MyTableModel类中的数据来存储并在jtable中查看它们。。。 有很多其他方法可以用我的数据填充表格,但它们不会给我一个列检查框…我应该怎么做Java 向AbstractTableModel的扩展类动态添加数据,java,swing,jtable,boolean,abstracttablemodel,Java,Swing,Jtable,Boolean,Abstracttablemodel,我有一些数据是从我的数据库加载的,作为一个公共静态列表存储在另一个类中,,我无法访问MyTableModel类中的数据来存储并在jtable中查看它们。。。 有很多其他方法可以用我的数据填充表格,但它们不会给我一个列检查框…我应该怎么做 class MyTableModel extends AbstractTableModel { private String[] columnNames = {"UserName","Admin","Blocked"}; private
class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"UserName","Admin","Blocked"};
private Object[Size][3] data;
//size is an variable thing witch i get it from db,uses as number of the row;
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
类MyTableModel扩展了AbstractTableModel{
私有字符串[]columnNames={“用户名”、“管理员”、“阻止”};
私有对象[大小][3]数据;
//大小是一个变量,我从db中得到它,用作行数;
public int getColumnCount(){
返回columnNames.length;
}
public int getRowCount(){
返回数据长度;
}
公共字符串getColumnName(int-col){
返回列名[col];
}
公共对象getValueAt(整数行,整数列){
返回数据[行][col];
}
公共类getColumnClass(int c){
返回getValueAt(0,c).getClass();
}
公共布尔值可编辑(int行,int列){
if(col<2){
返回false;
}否则{
返回true;
}
}
public void setValueAt(对象值、整行、整列){
数据[行][列]=值;
FireTableCell更新(行、列);
}
}
您应该避免使用
object.getClass()
返回列的类类型。如果该值恰好是数据集中唯一的null
值,会发生什么情况
相反,您应该传回实际的列类…(注意,如果没有实际的数据,我不知道应该传递什么值,所以这只是一个示例…)
应该避免使用
object.getClass()
返回列的类类型。如果该值恰好是数据集中唯一的null
值,会发生什么情况
相反,您应该传回实际的列类…(注意,如果没有实际的数据,我不知道应该传递什么值,所以这只是一个示例…)
@默认情况下,ODBC中的user2492820元数据返回可接受的Java数据类型是否有将checkboxesh包含到表中的解决方案?@user2492820如果您的问题没有得到回答,请不要将答案标记为“已回答”(程序员没有冒犯)。这将确保没有其他人会试图回答你的问题。如果您想要一列复选框:确保返回该列的
Boolean.class
(在getColumnClass(intc)
)并确保是可编辑的(introw,intcol)
也返回true。@user2492820默认情况下,ODBC中的元数据返回可接受的Java数据类型是否有将checkboxesh包含在表中的解决方案?@user2492820如果您的问题没有得到回答,请不要将答案标记为“已回答”(程序员没有冒犯)。这将确保没有其他人会试图回答你的问题。如果您想要一列复选框:确保返回该列的Boolean.class
(在getColumnClass(int c)
)并确保isCellEditable(int row,int col)
也返回true。If(col<2){return false;}else{return true;}
可以写在一行上,返回列>=2代码>而不是4行。如果(列<2){return false;}否则{return true;}
可以写入一行返回列>=2代码>而不是4行。
public Class getColumnClass(int c) {
return c < 2 ? String.class : Boolean.class;
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class TestTable11 {
public static void main(String[] args) {
new TestTable11();
}
public TestTable11() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
TableModel model = new SimpleTableModel();
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new JTable(model)));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class SimpleTableModel extends AbstractTableModel {
private List<Object[]> rows;
public SimpleTableModel() {
rows = new ArrayList<>(5);
rows.add(new Object[]{"Test1", "Test2", false});
rows.add(new Object[]{"Test3", "Test4", false});
rows.add(new Object[]{"Test5", "Test6", false});
rows.add(new Object[]{"Test7", "Test8", false});
rows.add(new Object[]{"Test9", "Test10", false});
rows.add(new Object[]{"Test11", "Test11", false});
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return rows.get(rowIndex)[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex == 2;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnIndex < 2 ? String.class : Boolean.class;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == 2 && aValue instanceof Boolean) {
rows.get(rowIndex)[columnIndex] = aValue;
}
}
}
}