[英]JTable only displaying 1 row
我試圖在JTable
顯示結果集的一部分(兩列),我只能看到一行。 JTable
在現有的GUI中,並且結果集傳遞到GUI類中的方法。 當我執行Vector size()
它將返回一個。 這告訴我列表中只有一個條目。 我應該在4個條目中看到我所看到的條目是我期望的最后一個4。
請查看下面的方法:任何幫助將不勝感激。
public static void getResultSet(ResultSet resultSet) throws SQLException {
ResultSetMetaData metaData = resultSet.getMetaData();
//JTable name is resultsTable includes Scrollpane
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = 2;
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
System.out.println("ColumnNames "+columnNames );
}
// data from the table
// Vector<Vector<Object>> data = new Vector<Vector<Object>>();
Vector<Vector<String>> data = new Vector<Vector<String>>();
while (resultSet.next()) {
Vector<String> vector = new Vector<String>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(resultSet.getString(columnIndex));
}
data.add(vector);
System.out.println("Vector Value = "+ data);
System.out.println("Vector Size =" + data.size()); //Returning 1 - Should see 4 entries
DefaultTableModel datamodel = new DefaultTableModel(data,columnNames);
resultsTable.setModel(datamodel);
}
“這告訴我列表中只有一個條目。我應該看到4個條目。我看到的條目是我期望的最后一個條目,應該是4。”
您將在每次迭代中創建一個新的DefaultTableModel
。 不要那樣做
DefaultTableModel datamodel = new DefaultTableModel(data,columnNames);
resultsTable.setModel(datamodel);
取出上面。 而是先設置模型。 然后在循環中只是.addRow(row)
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
System.out.println("ColumnNames "+columnNames );
}
DefaultTableModel datamodel = new DefaultTableModel(columnNames, 0);
table.setModel(datamodel);
while (resultSet.next()) {
Vector<String> vector = new Vector<String>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(resultSet.getString(columnIndex));
}
datamodel.addRow(vector);
}
DefaultTableModel(columnNames, 0)
的構造函數,其中0
是初始行數。 因此,您需要做的就是在while(rs.next())
動態地while(rs.next())
添加行。 對於每一行數據,您都可以在Vector
獲得datamodal.addRow(vector)
更新
就像我說的,我不知道您在做什么錯,但是我的代碼沒有錯。 這是一個測試程序
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TestTableModel {
private ResultSet resultSet = null;
public TestTableModel() throws SQLException {
initDB();
JTable table = new JTable(getModel(resultSet));
JScrollPane scroll = new JScrollPane(table);
JFrame frame = new JFrame("Test Table Model");
frame.add(scroll);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
TestTableModel testTableModel = new TestTableModel();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
});
}
private DefaultTableModel getModel(ResultSet resultSet) throws SQLException {
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
Vector<String> columnNames = new Vector<>();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
System.out.println("ColumnNames " + columnNames);
}
DefaultTableModel dataModel = new DefaultTableModel(columnNames, 0);
while (resultSet.next()) {
Vector<String> vector = new Vector<>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(resultSet.getString(columnIndex));
}
dataModel.addRow(vector);
}
return dataModel;
}
private void initDB() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/...", "...", "...");
ps = conn.prepareStatement("SELECT * FROM city");
resultSet = ps.executeQuery();
} catch (ClassNotFoundException | SQLException ex) {
ex.printStackTrace();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.