【问题标题】:JTable simple code when a row is selected?选择行时的JTable简单代码?
【发布时间】:2014-11-22 22:18:05
【问题描述】:

我有一个 JTable,我使用 Vector 对象填充了该表。我希望在对 jtable 进行更改后更新数据库(将数据提供给我的 jtable)。我想到了一种特殊的更新模式。我想用另一种方法进行更新。此方法接收一个参数。我想给出用户在 JTable 中选择的行的第一列的值(它是数据库中表的代码,所以它是一个整数)。 谁能给我一个示例代码来做到这一点?我不知道如何取“用户在 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");
}

}

【问题讨论】:

标签: java mysql swing jtable resultset


【解决方案1】:

答案是将行中的所有数据加载到新表单(更新表单)或退出表单中然后当表单出现时,它将加载选定的行数据,带有更新按钮的表单 用户可以更新任何字段,您应该使用 id 运行更新语句

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 2018-02-28
    • 2018-10-30
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多