0
我有一個JTable和我通過使用矢量對象填充表。我希望數據庫(將數據提供給我的jtable)在對jtable進行更改後進行更新。我認爲更新的特殊模式。我想用其他方法進行更新。該方法收到一個參數。我想給出用戶在JTable中選擇的行的第一列(它是數據庫中的表的代碼,所以它是一個整數)的值。 任何人都可以給我一個示例代碼來做到這一點?我不知道如何把「JTable中用戶選擇的行的第一列的值」。 我讀過,我必須創建一個costum tablemodel並重寫一些方法,但是哪些方法以及如何實現這些方法來實現我的目標?謝謝。當選擇一行時,JTable簡單代碼?
我的代碼是:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;
import java.util.logging.Level;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
public class provemain2 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new provemain2();
}
});
}
private final JButton button;
private final JTable table;
private final DefaultTableModel tableModel = new DefaultTableModel();
public provemain2() throws HeadlessException {
JFrame one =new JFrame();
one.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
one.setVisible(true);
table = new JTable(tableModel);
one.add(new JScrollPane(table), BorderLayout.CENTER);
button = new JButton("Load Data");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
loadData();
return null;
}
}.execute();
}
});
one.add(button, BorderLayout.PAGE_START);
one.setSize(640, 480);
}
private void loadData() {
//LOG.info("START loadData method");
button.setEnabled(false);
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root","psw");
Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery("select * from Acquirenti");
ResultSetMetaData metaData = rs.getMetaData();
// Names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(metaData.getColumnName(i));
}
// Data of the table
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int i = 1; i <= columnCount; i++) {
vector.add(rs.getObject(i));
}
data.add(vector);
}
tableModel.setDataVector(data, columnNames);
} catch (Exception e) {
//LOG.log(Level.SEVERE, "Exception in Load Data", e);
}
button.setEnabled(true);
//LOG.info("END loadData method");
}
}
請參見[*如何編寫表模型監聽器*](http://docs.oracle.com/javase/tutorial/uiswing/events/tablemodellistener。 HTML),如這可能[重複](http://stackoverflow.com/q/17232118/230513)所示。 – trashgod 2014-09-28 11:26:45
當您調用方法setValueAt(...)時,您可以編寫自己的[table model] [1]並將數據保存到數據庫中 [1]:http://docs.oracle.com/javase/教程/ uiswing /組件/ table.html#數據 – 2014-09-28 11:47:58