jtable按钮显示数据库数据
时间: 2023-09-10 09:06:55 浏览: 85
jsp-database-table.zip_Table_jsp 显示数据
可以通过以下步骤来实现:
1. 创建一个 JTable 对象,并将其添加到 JFrame 窗口中。
2. 使用 JDBC 连接数据库,并编写 SQL 查询语句以检索所需的数据。
3. 将查询结果保存在 ResultSet 对象中,并使用 ResultSetMetaData 获取列的名称和数量。
4. 创建一个 DefaultTableModel 对象,并将列名称和数据添加到模型中。
5. 将模型设置为 JTable 的数据模型,并使用 setModel() 方法将其设置为 JTable 的模型。
6. 在 JTable 上添加一个按钮列,可以使用 TableColumnModel 和 TableCellRenderer 来实现。
7. 在按钮的 ActionListener 中编写代码,以便在单击按钮时执行所需的操作,例如显示所选行的详细信息或删除所选行。
下面是一个简单的示例代码,可以根据需要进行修改:
```
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableExample extends JFrame {
private JTable table;
private DefaultTableModel model;
public JTableExample() {
// 创建 JTable 对象
table = new JTable();
// 创建表头
String[] columns = {"ID", "Name", "Age", "Gender", "Action"};
// 创建数据模型
model = new DefaultTableModel(columns, 0);
// 将数据模型设置为 JTable 的模型
table.setModel(model);
// 添加按钮列
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(4).setCellRenderer(new ButtonRenderer());
columnModel.getColumn(4).setCellEditor(new ButtonEditor(new JCheckBox()));
// 添加 JTable 到 JFrame 窗口
add(new JScrollPane(table));
// 设置窗口属性
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 400);
setVisible(true);
// 加载数据库数据
loadData();
}
public void loadData() {
try {
// 创建 JDBC 连接
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
// 创建 SQL 查询语句
String sql = "SELECT * FROM users";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// 获取列的名称和数量
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
String[] columns = new String[columnCount];
for (int i = 1; i <= columnCount; i++) {
columns[i - 1] = metaData.getColumnName(i);
}
// 添加数据到模型中
while (rs.next()) {
Object[] rowData = new Object[columnCount + 1];
for (int i = 1; i <= columnCount; i++) {
rowData[i - 1] = rs.getString(i);
}
rowData[columnCount] = "Action";
model.addRow(rowData);
}
// 关闭 JDBC 连接
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new JTableExample();
}
// 自定义按钮列的渲染器
class ButtonRenderer extends JButton implements TableCellRenderer {
public ButtonRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((value == null) ? "" : value.toString());
return this;
}
}
// 自定义按钮列的编辑器
class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private String label;
private boolean isPushed;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(e -> fireEditingStopped());
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (isSelected) {
button.setForeground(table.getSelectionForeground());
button.setBackground(table.getSelectionBackground());
} else {
button.setForeground(table.getForeground());
button.setBackground(table.getBackground());
}
label = (value == null) ? "" : value.toString();
button.setText(label);
isPushed = true;
return button;
}
public Object getCellEditorValue() {
if (isPushed) {
// 在这里编写按钮单击后的操作
JOptionPane.showMessageDialog(button, label + " was clicked!");
}
isPushed = false;
return label;
}
public boolean stopCellEditing() {
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
}
}
}
```
阅读全文