【发布时间】:2012-12-30 08:52:12
【问题描述】:
我创建了一个具有自定义模型和特征的JTable。我有一个很长的书面课程,可以正确执行设置和渲染。我看到 .getSelectedRows() 方法不起作用并且永远不会评估为值。我试图获取选择的第一行和最后一行的索引。这是我的代码。
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
rows = table.getSelectedRows();
firstRow = rows[0];
int rowCount = rows.length;
lastRow = rows[(rowCount - 1)];
if (command.equals("Run Threw")) {
}else if (command.equals("Shield Bash")) {
this.attack(firstRow, lastRow, command);
}
public boolean block (int defendersRow) {
}
public boolean fumble (int attackersRow) {
}
public boolean dodge (int defendersRow) {
}
public boolean critical (int attackersRow, int attackRoll) {
}
public void attack(int firstRow, int lastRow, String command) {
command = this.command;
firstRow = this.firstRow;
lastRow = this.lastRow;
if (command == "Bludgeon" || command == "React" || command == "ShieldBash") {
attackersRow = this.lastRow;
defendersRow = this.firstRow;
}else if(command == "Attack" || command == "Skill") {
attackersRow = this.firstRow;
defendersRow = this.lastRow;
}else {
}
table.setValueAt(true, attackersRow, 16);
fumbled = this.fumble(attackersRow);
if (fumbled == true) {
outputString = "fumbled";
}
Object maxDamageObject = table.getValueAt(attackersRow, 10);
int maxDamage = (Integer) maxDamageObject;
attackRoll = generator.nextInt(100) + 1;
this.critical(attackersRow, attackRoll);
if (criticaled == true) {
outputString = "criticaled";
}
dodged = this.dodge(defendersRow);
if (dodged == true) {
outputString = "dodged";
}
blocked = this.block(defendersRow);
if (blocked == true) {
outputString = "blocked";
}
int defenseRoll = generator.nextInt(100) + 1;
Object attackBaseObject = table.getValueAt(attackersRow, 6);
Object defenseBaseObject = table.getValueAt(defendersRow, 11);
int attackBase = (Integer) attackBaseObject;
int defenseBase = (Integer) defenseBaseObject;
int attack = attackRoll + attackBase;
int defense = defenseRoll + defenseBase;
Object minDamageObject = table.getValueAt(attackersRow, 9);
int minDamage = (Integer) minDamageObject;
damage = generator.nextInt((maxDamage - minDamage))+minDamage;
if (criticaled == true) {
damage = maxDamage * 2;
}else if (attack >= (defense + 50)) {
damage = damage * 2;
}else if (attack >= defense) {
damage = damage;
}else {
damage = 0;
}
this.outputSelection(outputString, attackersRow, defendersRow, command, damage);
this.damage(defendersRow, damage);
}
private void damage(int defendersRow, int damage) {
}
private void outputSelection(String outputString, int attackersRow, int defendersRow, String command, int damage) {
}
【问题讨论】:
-
哇,这里有很多上下文...
JTable#getSelectedRows可能会返回一个空数组,如果没有选择任何内容,您应该在尝试访问数组之前检查JTable#getSelectedRowCount或rows.length。 . -
我同意你的观点,但由于我正在做测试,所以我知道我已经选择了行,但它仍然没有其他任何东西出现?
-
在您的问题中编辑并添加可执行代码。
-
你有错误的表参考...没有选择...海豚在水槽里玩耍...
-
@LukeGreenleaf 我看到一个错误,我不知道它与您的问题有关,但在您的
attack方法中使用String.equals()方法进行字符串相等。此外,如果您可以在没有this的情况下访问变量和方法,那么最好在没有this的情况下使用它,而且fumbled和critical是boolean,那么您不需要使用==来检查它们
标签: java swing jtable selection listselectionlistener