从jTable中的多个选定行获取数据

时间:2015-07-23 11:10:45

标签: java swing jtable

我需要根据所选行(由用户)从jTable获取不同的值 我想我已经拥有的代码应该这样做,但它总是在所有行中显示相同的nr 你们能给我一些帮助吗?

int linha  = Tabela.getSelectedRowCount();
Gerar ger = modelo.getGerar(linha);
System.out.println(linha);

for(int j = 0; j < linha; j ++) 
{
    int nr = ger.getNr();
    System.out.println(nr);

    char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZ0123456789".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 8; i++) 
    {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }

    String output = sb.toString();
    System.out.println(output);

    Gerar novo = new Gerar(nr, output);
    modelo.adicionaNovoGerar(novo);
}

更新

public class Gerar implements Serializable 
{
    private Integer Nr;
    private String Passe;

    public Gerar(Integer Nr, String Passe) 
    {
        this.Nr = Nr;
        this.Passe = Passe;
    }

    public Integer getNr() 
    {
        return Nr;
    }

    public void setNr(Integer Nr) 
    {
        this.Nr = Nr;
    }
}

2 个答案:

答案 0 :(得分:1)

 int linha  = Tabela.getSelectedRowCount();

这将使所选行的数量不是所选行的列表。

您必须使用getSelectedRows

Tabela.getSelectedRows();

将返回所有选定行的索引[返回整数数组int[]]

您要将selectedRow计数分配给班级ger

 Gerar ger = modelo.getGerar(linha);

并且在你正在调用的for循环中

int nr = ger.getNr();

将返回与您调用的次数相同的值,因为该值在forloop

之前设置

答案 1 :(得分:0)

这就是我这样做的方式:

int[] selectedRows = table.getSelectedRows();
if (selectedRows.length != 0) {
    for (int counter : selectedRows) {
        String value= table.getModel().getValueAt(counter, Constants.COLUMN).toString();
        /*
        * do stuff
        */
    }
}

为了给出一些上下文,我使用了一个JTable,它有关于文件夹中文件的信息。该应用程序允许我删除文件,因此,我使用该段代码检索所选文件的名称并逐个删除。

在你的情况下(我认为)这一行:

String value= table.getModel().getValueAt(counter, Constants.COLUMN).toString();

会变成这样:

Gerar ger = modelo.getGerar(counter);

注意:我强烈建议使用小写字母作为属性的第一个字母(例如:private Integer Nr; - &gt; private Integer nr;)