Java获取JTable值(每行)

Zyr*_*rax 2 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

这段代码是我的Jbutton调用action事件的(我已经从JTable中排除了我的代码,因为它从我的数据库中获取Jtable值)

ActionListener tableAction = new GetTableValue();


buttonEdit = new JButton("EDIT");


buttonEdit.addActionListener(tableAction);
Run Code Online (Sandbox Code Playgroud)

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

Raj*_*hri 11

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

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

无论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));
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,您可以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]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mad*_*mer 5

getValueAt将返回单元格的值(在行/列).除非你的表模型支持它,否则没有方便的方法(超出你的工作)在单个请求中获取整行.

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

UPDATE

唯一的方法是,如果您使用的表模型具有getRow(或等效的)方法.如果不知道如何将数据存储在表格模型中,那么几乎不可能给出准确的答案,但一般的想法是......

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

    public MyRowData getRowAt(int index) { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在,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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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