从 JTable 中的 MySql 表中右键单击删除行

我有一个 Java 类,如下所示,它显示我的数据库中的表。我想添加一个将打开弹出菜单并从表中删除行的功能。我怎样才能做到这一点?


    import java.awt.BorderLayout;

    import javax.swing.*;

    import java.sql.*;

    import java.util.Vector;


    public class Test {

        public static void main(String[] args) {

            Connection con = null;

            Statement st = null;

            ResultSet rs = null;

            String s;


            try {

                con = DriverManager.getConnection("jdbc:mysql://localhost/sms", "root", "");

                st = con.createStatement();

                s = "select * from sent_messages";

                rs = st.executeQuery(s);

                ResultSetMetaData rsmt = rs.getMetaData();

                int c = rsmt.getColumnCount();

                Vector column = new Vector(c);


                for (int i = 1; i <= c; i++) {

                    column.add(rsmt.getColumnName(i));

                }


                Vector data = new Vector();

                Vector row = new Vector();


                while (rs.next()) {

                    row = new Vector(c);


                    for (int i = 1; i <= c; i++) {

                        row.add(rs.getString(i));

                    }


                    data.add(row);

                }


                JFrame frame = new JFrame();

                frame.setSize(500, 600);

                frame.setLocationRelativeTo(null);

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();

                JTable table = new JTable(data, column);

                JScrollPane jsp = new JScrollPane(table);

                panel.setLayout(new BorderLayout());

                    panel.add(jsp, BorderLayout.CENTER);            

                    frame.setContentPane(panel);

                    frame.setVisible(true);


                } catch (Exception e) {

                    JOptionPane.showMessageDialog(null, "ERROR");

            } 



慕运维8079593
浏览 83回答 1
1回答

红糖糍粑

我必须处理代码并将其重写为如下所示的 3 个类:JTablePopupMenuExample.java    import java.awt.BorderLayout;    import java.awt.event.ActionEvent;    import java.awt.event.ActionListener;    import java.beans.Statement;    import java.sql.Connection;    import java.sql.DriverManager;    import java.sql.ResultSet;    import java.sql.ResultSetMetaData;    import java.sql.SQLException;    import java.util.ArrayList;    import java.util.List;    import java.util.Vector;    import javax.swing.JFrame;    import javax.swing.JMenuItem;    import javax.swing.JPanel;    import javax.swing.JPopupMenu;    import javax.swing.JScrollPane;    import javax.swing.JTable;    import javax.swing.SwingUtilities;    import javax.swing.table.DefaultTableModel;    public class JTablePopupMenuExample extends JFrame implements ActionListener {        private JTable table;        private DefaultTableModel tableModel;         private JPopupMenu popupMenu;        private JMenuItem menuItemAdd;        private JMenuItem menuItemRemove;        private JMenuItem menuItemRemoveAll;        List<SentMessagesTable> msgList;        public JTablePopupMenuExample() throws Exception{            super("JTable Popup Menu Example");            // sample table data            String[] columnNames = new String[] {"id", "receiver", "sender", "msg_text", "status", "x_date"};            msgList = new ArrayList<SentMessagesTable>();            ResultSet rs = getTableRows();              while (rs.next()) {                SentMessagesTable msg = new SentMessagesTable();                msg.setId(rs.getInt("id"));                msg.setReceiver(rs.getString("receiver"));                msg.setSender(rs.getString("sender"));                msg.setMsgText(rs.getString("msg_text"));                msg.setStatus(rs.getString("status"));                msg.setxDate(rs.getString("x_date"));                msgList.add(msg);            }            String[][] rowDataTable = new String[34400][6];            for(int i = 0 ; i < msgList.size();i++) {                //burda jtable listesini doldur                rowDataTable[i][0] = String.valueOf(msgList.get(i).getId());                rowDataTable[i][1] = msgList.get(i).getReceiver();                rowDataTable[i][2] = msgList.get(i).getSender();                rowDataTable[i][3] = msgList.get(i).getMsgText();                rowDataTable[i][4] = msgList.get(i).getStatus();                rowDataTable[i][5] = msgList.get(i).getxDate();             }            // constructs the table with sample data            tableModel = new DefaultTableModel(rowDataTable, columnNames);            table = new JTable(tableModel);            // constructs the popup menu            popupMenu = new JPopupMenu();            menuItemAdd = new JMenuItem("Add New Row");            menuItemRemove = new JMenuItem("Remove Current Row");            menuItemRemoveAll = new JMenuItem("Remove All Rows");            menuItemAdd.addActionListener(this);            menuItemRemove.addActionListener(this);            menuItemRemoveAll.addActionListener(this);            popupMenu.add(menuItemAdd);            popupMenu.add(menuItemRemove);            popupMenu.add(menuItemRemoveAll);            // sets the popup menu for the table            table.setComponentPopupMenu(popupMenu);            table.addMouseListener(new TableMouseListener(table));            // adds the table to the frame            add(new JScrollPane(table));            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            setSize(800,1000);            setLocationRelativeTo(null);        }        public static void main(String[] args){                         SwingUtilities.invokeLater(new Runnable() {                @Override                public void run() {                    try {                        new JTablePopupMenuExample().setVisible(true);                    } catch (Exception e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            });        }        @Override        public void actionPerformed(ActionEvent event) {            JMenuItem menu = (JMenuItem) event.getSource();            if (menu == menuItemAdd) {                addNewRow();            } else if (menu == menuItemRemove) {                removeCurrentRow();            } else if (menu == menuItemRemoveAll) {                removeAllRows();            }        }        private void addNewRow() {            tableModel.addRow(new String[0]);        }        private void removeCurrentRow(){            int selectedRow = table.getSelectedRow();            tableModel.removeRow(selectedRow);            String jdbcUrl = "jdbc:mysql://localhost/sms";            String username = "root";            String password = "";            String sql = "delete from sent_messages where id = '"+msgList.get(selectedRow).getId()+"'";           // java.sql.Statement stmt = null;            try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password);                 java.sql.Statement stmt = conn.createStatement();) {              stmt.executeUpdate(sql);              System.out.println("Record deleted successfully");            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }           }        private void removeAllRows() {            int rowCount = tableModel.getRowCount();            for (int i = 0; i < rowCount; i++) {                tableModel.removeRow(0);            }        }        private ResultSet getTableRows() throws SQLException {            Connection con = null;            java.sql.Statement st = null;            ResultSet rs = null;            String s;            try {                con = DriverManager.getConnection("jdbc:mysql://localhost/sms", "root", "");                st = con.createStatement();                s = "select * from sent_messages";                rs = ((java.sql.Statement) st).executeQuery(s);            }catch(Exception e) {                    System.out.println(e.toString());                }             finally {                //con.close();            }            return rs;        }    }SentMessagesTable.java其中涉及(getters and setters)public class SentMessagesTable {    int id;    String receiver;    String sender;    String msgText;    String status;    String xDate;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getReceiver() {        return receiver;    }    public void setReceiver(String receiver) {        this.receiver = receiver;    }    public String getSender() {        return sender;    }    public void setSender(String sender) {        this.sender = sender;    }    public String getMsgText() {        return msgText;    }    public void setMsgText(String msgText) {        this.msgText = msgText;    }    public String getStatus() {        return status;    }    public void setStatus(String status) {        this.status = status;    }    public String getxDate() {        return xDate;    }    public void setxDate(String xDate) {        this.xDate = xDate;    }}和TableMouse Listener.javaimport java.awt.Point;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JTable;public class TableMouseListener extends MouseAdapter {    private JTable table;    public TableMouseListener(JTable table) {        this.table = table;    }    @Override    public void mousePressed(MouseEvent event) {        // selects the row at which point the mouse is clicked        Point point = event.getPoint();        int currentRow = table.rowAtPoint(point);        table.setRowSelectionInterval(currentRow, currentRow);    }}使用该代码,我能够从 JTable 以及我的数据库中删除记录。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java