从JTable检索数据

时间:2012-02-05 08:55:35

标签: java swing jtable

我正在尝试从Java中获取表中的数据。我已经能够获取数据,但是当它被输出时,它自己连接起来。如果数据是“admin”,则输出为“adminadmin”。下面是代码。有人能告诉我问题是什么吗?

package sample;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.sql.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.proteanit.sql.DbUtils;

public class Table extends JFrame{
    JTable table;
    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;

    private int row;
    private String name, status;

    private void connect(){
        conn = myconnection.ConnectDb();
    }


    public void mouseClicked(MouseEvent e) {
        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
        int sel = table.getSelectedRow();
        name = table.getModel().getValueAt(sel, 0).toString();
        System.out.print(name);
    }
});
    }

    private void UpdateJTable(){

        String sql = "select firstname, status from tblmember";

        try{
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            table.setModel(DbUtils.resultSetToTableModel(rs));
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }


    public Table(){
        setLayout(new FlowLayout());

        String [] columnName={"Name", "Status"};
        Object [][] data={
            {null, null},
            {null, null}
        };

        table = new JTable(data, columnName);
        table.setPreferredScrollableViewportSize(new Dimension(400,50));
        table.setFillsViewportHeight(true);

        JScrollPane sp = new JScrollPane(table);
        add(sp);
    }

    public static void main(String[] args){
        Table gui = new Table();

        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(700, 500);
        gui.setVisible(true);
        gui.setTitle("AAAAAAAA");
        gui.connect();
        gui.UpdateJTable();
        gui.mouseClicked(null);

    }
}

1 个答案:

答案 0 :(得分:5)

它是连接的,因为选择事件被触发两次,并且您使用System.out.print()来显示选择。

如果事件的getValueIsAdjusting()方法返回true,您应该忽略该事件。

另外,请注意,返回的选定行索引不一定是与表模型索引相同的索引:如果对表进行排序,则两个索引都会有所不同。在从模型中获取数据之前使用JTable的convertRowIndexToModel()