gpt4 book ai didi

java - 将 AbstractTableModel 实现为 JTable。如何添加方法?

转载 作者:行者123 更新时间:2023-12-01 15:23:13 27 4
gpt4 key购买 nike

我曾经在 JTable 中显示数据库数据,并且工作正常。我发现我需要实现 AbstractTableModel 或 DefaultTableModel 才能立即更新数据。

我不确定应该在 getValueAt() 中写什么?我应该在哪里添加 fireDataChanged()?任何指导表示赞赏,谢谢!

我曾经使用以下代码检索数据库数据:

Vector columnNames = new Vector();
Vector data = new Vector();

try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/watchlist","root","root");

String sql = "SELECT * FROM watchlist";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();

int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( md.getColumnName(i));
}

int rowCount = md.getColumnCount();
while (rs.next())
{
Vector row = new Vector(rowCount);

for (int i=1; i <= rowCount; i++)
{
row.addElement( rs.getObject(i) );
}

data.addElement( row );
}

rs.close();
stmt.close();
con.close();
}

catch(Exception e)
{
System.out.println(e);
}

我的抽象表模型:

public class MyTableModel extends AbstractTableModel 
{
Vector columnNames = new Vector();
Vector data = new Vector();

public void connectionDB()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/watchlist","root","root");

String sql = "SELECT * FROM watchlist";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
}

catch(Exception e)
{
System.out.println(e);
}
}

public int getColumnCount()
{
return columnNames.size();
}

public int getRowCount()
{
return data.size();
}

public Object getValueAt()
{
return data;
}

public boolean isCellEditable(int row, int col)
{
return false;
}

}

最佳答案

这是使用AbstractTableModel的示例:

public class CustomTableModel extends AbstractTableModel
{
private static final long serialVersionUID = 1L;
private static final String[] columnNames = new String[]{"ID", "Name", "Number", "Yes/No"};
protected List<Foo> lstFoo;
protected Class<?>[] types = new Class[]{Integer.class, String.class, String.class, Boolean.class};

public CustomTableModel(List<Foo> lstFoo)
{
this.lstFoo = lstFoo;
fireTableDataChanged();
}

@Override
public String getColumnName(int columnIndex)
{
return columnNames[columnIndex];
}

@Override
public Class<?> getColumnClass(int columnIndex)
{
return types[columnIndex];
}

@Override
public boolean isCellEditable(int row, int columnIndex)
{
return false;
}

@Override
public Object getValueAt(int row, int column)
{
if(row < 0 || row >= lstFoo.size()) return null;
Foo obj = lstFoo.get(row);
switch(column)
{
case 0: return obj.getId();
case 1: return obj.getName();
case 2: return obj.getNumber();
case 3: return obj.isYes();
default: return null;
}
}

@Override
public int getRowCount()
{
return lstFoo.size();
}

@Override
public int getColumnCount()
{
return columnNames.length;
}
}

关于java - 将 AbstractTableModel 实现为 JTable。如何添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com