2

我想从 Jtable 中获取值,我使用 getvalueat 进行了尝试,但是每当我尝试从 JTable 中获取值时,它只从所选行的第一列中获取值,我需要获取所有值从我选择的 Jtable 中。你能帮我解决这个问题吗

here is my code:
class GetTableValue implements ActionListener{
    public void actionPerformed(ActionEvent e){
        AbstractButton button = (AbstractButton)e.getSource();
        if(e.getActionCommand().equals(button.getActionCommand)){
            int row = table.getSelectedRow();
            int col = table.getSelectedColumn();

            Object data = (Object)table.getValueAt(row, col);
            JOptionPane.showMessageDialog(null, data);
        }
    }
}

这是我的操作事件,其中所选表的值显示在 JOptionPane 中,不幸的是它只显示一个值(这是您已经选择的值)而不是整行。

此代码用于我的 Jbutton 调用操作事件(我已经从 JTable 中排除了我的代码,因为它从我的数据库中获取了 Jtable 值)

ActionListener tableAction = new GetTableValue();


buttonEdit = new JButton("EDIT");


buttonEdit.addActionListener(tableAction);

代码简单明了,我还搜索 G(google) 先生关于获取行的好教程,不幸的是没有获取 Jtable 值(每行)的好教程。

4

4 回答 4

11

如果您想要所选行中的所有值,请尝试此代码

int row = jTable1.getSelectedRow();
int column = jTable1.getColumnCount();
for(int i = 0; i < column; i++) {
    System.out.println(jTable1.getValueAt(row, i));
}

无论jtable中有多少列,您都会获得所选行的所有值

如果您想要 jtable 中的所有值,请尝试:

int row = jTable1.getRowCount();
int column = jTable1.getColumnCount();
for (int j = 0; j  < row; j++) {
    for (int i = 0; i  < column; i++) {
        System.out.println(jTable1.getValueAt(j, i));
    }
}

是的,您可以使用它Object[]来存储值。例如:

Object[] val = new Object[column];
for (int k = 0; k  < val.length - 1; k++) {
    for (int j = 0; j  < row; j++) {
        for (int i = 0; i  < column; i++) {
            val[k] = jTable1.getValueAt(j, i);
            System.out.println(val[k]);
        }
    }
}
于 2012-09-05T06:11:21.130 回答
5

getValueAt将返回单元格的值(在行/列)。除非您的表模型支持它,否则没有方便的方法(除了您正在做的事情)在单个请求中获取整行。

另外,请记住,如果表格被排序或过滤,模型索引将与视图不匹配,您需要先转换它们,使用convertRowIndexToModelconvertColumnIndexToModel

更新

解决它的唯一方法是您使用的表模型是否具有getRow(或等效)方法。在不知道如何将数据存储在表模型中的情况下,几乎不可能给出准确的答案,但一般的想法是......

public class MyAwesomeTableModel extends AbstractTableModel {
    // All the usual stuff...

    public MyRowData getRowAt(int index) { ... }
}

现在,MyRowData是您创建的表数据的任何实现。它可以(最好)是单个对象Object,也可以DefaultTableModel是对象数组。

class GetTableValue implements ActionListener{
    public void actionPerformed(ActionEvent e){
        AbstractButton button = (AbstractButton)e.getSource();
        if(e.getActionCommand().equals(button.getActionCommand)){

            int row = table.convertRowIndexToModel(table.getSelectedRow());
            MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel();

            MyRowData data = model.getRowAt(row);
            JOptionPane.showMessageDialog(null, data);
        }
    }
}

这完全取决于您如何实现您的TableModel以及如何实现您的行数据,但这是一般的 jist

于 2012-09-05T05:37:16.037 回答
2
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {                                     

int selectedRow;

ListSelectionModel rowSM = jTable1.getSelectionModel();

  rowSM.addListSelectionListener(new ListSelectionListener()
  {
    @Override
    public void valueChanged(ListSelectionEvent e) 
    {
        ListSelectionModel lsm = (ListSelectionModel) e.getSource();

        selectedRow = lsm.getMinSelectionIndex();

        int numCols = jTable1.getColumnCount();

        model = (DefaultTableModel) jTable1.getModel();

        System.out.print(" \n row " + selectedRow + ":");

        for (int j = 0; j < numCols; j++) 
        {
            System.out.print(" " + model.getValueAt(selectedRow, j));
        }

    }
});
}

使用它,您可以获得整行的值,您单击特定行。

于 2013-12-18T11:07:42.837 回答
1

您可以尝试以下代码来获取选定的行值:

int selectedRow = jTableName.getSelectedRow();
selectedRow = jTableName.convertRowIndexToModel(selectedRow);
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0);
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1);
于 2012-09-05T05:57:16.777 回答