从 jTable 中的多个选定行获取数据
Getting data from several selected rows in a 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;
}
}
我是这样做的:
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; -> private Integer nr;)
int linha = Tabela.getSelectedRowCount();
这将给出所选行的编号,而不是所选行的列表。
为此你必须选择 getSelectedRows
Tabela.getSelectedRows();
这将 returns 所有选定行的索引[return 一个整数数组 int[]
]
并且您正在将 selectedRow 计数分配给 class ger
Gerar ger = modelo.getGerar(linha);
在您调用的 for 循环中
int nr = ger.getNr();
这将 return 与您调用多次相同的值,因为该值是在 forloop
之前设置的
我需要根据(用户)选择的行从 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;
}
}
我是这样做的:
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; -> private Integer nr;)
int linha = Tabela.getSelectedRowCount();
这将给出所选行的编号,而不是所选行的列表。
为此你必须选择 getSelectedRows
Tabela.getSelectedRows();
这将 returns 所有选定行的索引[return 一个整数数组 int[]
]
并且您正在将 selectedRow 计数分配给 class ger
Gerar ger = modelo.getGerar(linha);
在您调用的 for 循环中
int nr = ger.getNr();
这将 return 与您调用多次相同的值,因为该值是在 forloop
之前设置的