데이터베이스 정보를 테이블에 표시하는 것에 관해서이 사이트에 대한 이전의 조언을 따라 왔지만 지금까지는 작동하지 않습니다. mainTable이라는 테이블을 가진 Netbeans Dialog를 생성했습니다. MySql에서 가져온 ResultSet으로 Model을 설정하고 있습니다.JDBC에서 JTable으로 데이터 표시하기
EDIT 전체 클래스 :
import swing.SwingUtilities;
import javax.java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
swing.table.DefaultTableModel;
public class AddressBookImpl extends AddressBookGui implements ActionListener {
final static AddressBookImpl impl = new AddressBookImpl();
DefaultTableModel defaultTableModel = new DefaultTableModel();
AddressBookGui gui = new AddressBookGui();
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() { impl.startGUI(); }});
}
public void startGUI(){
gui.main(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setResizable(true);
this.setTitle("Address Book");
listeners();
refreshTable();
}
public DefaultTableModel refreshTable() {
try{
DatabaseImpl dbimpl = new DatabaseImpl();
dbimpl.refreshDatabase();
ResultSet refreshResult = dbimpl.refreshResult;
ResultSetMetaData meta = refreshResult.getMetaData();
int numberOfColumns = meta.getColumnCount();
while (refreshResult.next())
{
Object[] rowData = new Object[numberOfColumns];
for (int i = 0; i < rowData.length; ++i)
{
rowData[i] = refreshResult.getObject(i + 1);
}
defaultTableModel.addRow(rowData);
}
this.defaultTableModel = defaultTableModel;
} catch (Exception e) {
e.printStackTrace();
}
gui.mainTable.setModel(defaultTableModel);
return defaultTableModel;
}
public void listeners() {
quitFileMenuBar.addActionListener(this);
addButton.addActionListener(this);
refreshButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase("Quit"))
{
this.dispose();
}
if (e.getActionCommand().equalsIgnoreCase("Add"))
{
// Add a new address to the DB
}
if (e.getActionCommand().equalsIgnoreCase("About"))
{
}
if (e.getActionCommand().equalsIgnoreCase("Refresh"))
{
refreshTable();
System.out.println("Refreshing........");
}
}
}
그리고 DatabaseImpl 클래스 :
protected ResultSet refreshDatabase() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
System.out.println("Connection is created to " + url);
Statement statement = con.createStatement();
String selectAllQuery = "Select * from " + table + ";";
ResultSet refreshResult = statement.executeQuery(selectAllQuery);
// con.close();
this.refreshResult = refreshResult;
return refreshResult;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return refreshResult;
}
그러나 이것은 단지 테이블이 있어야 할 빈 영역, 도움이 보여?
GUI 클래스는 표준 netbeans 생성 클래스입니다.
코드에 약간의 리팩토링이 필요합니다 ... AdderssBookGui는 테이블이 표시된 대화 상자입니까? 'TableModel'을 설정 한 후에 왜 그것을 폐기하고 있습니까? 또는 (TableModel을 반환하기 때문에)이 메서드의 호출자가 설정 한'TableModel'을 가져옵니다. – Kai
AddressBookGui 대화 상자입니다 예, 나는 처분을 제거하고 여전히 작동하지 않습니다, 나는 AddressBookGui 클래스에 직접 TableModel을 추가하려고했으나이 메서드를 호출하는 것을 의미했습니다. 그리고이 클래스를 확장하면 루프 및 스택 오버플로 오류 준. –
그것은 DB에 연결하여 ResultSet Works가 잘 작동하고 rowData가 DB에 있던 정보를 보유하고 있기 때문에 JTable에 적용되지 않습니다. –