Java获取JTable值(每行)

时间:2012-09-05 05:31:47

标签: java swing jtable

我想从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以调用action事件(我已经从JTable中排除了我的代码,因为它从我的数据库中获取Jtable值)

ActionListener tableAction = new GetTableValue();


buttonEdit = new JButton("EDIT");


buttonEdit.addActionListener(tableAction);

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

5 个答案:

答案 0 :(得分:10)

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

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]);
        }
    }
}

答案 1 :(得分: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以及如何实施行数据,但这是一般的数据

答案 2 :(得分: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));
        }

    }
});
}

使用此功能,您可以获得整行的值,点击特定行。

答案 3 :(得分:1)

答案 4 :(得分: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);