1

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) {


}
4

2 に答える 2

2

コードに問題はありません。次の点をクロスチェックできるかもしれません。

  1. 単一または複数の行を選択できますか? または、 jTableObject.getRowSelectionAllowed() が返すものを確認してください
  2. 行を選択した後にのみコードが呼び出されますか。期待値を返すことができるように、いくつかの行が選択された後にコードを実行する必要があります。
  3. 上記のコードを呼び出すリスナーを、テーブルに追加します。

小さな点ですが、クロスチェックする方が良いです:)。

于 2013-01-16T05:47:28.820 に答える
2

この作業ListSelectionListenerに示すように、テーブルにを追加してListSelectionModel、何かが表示されるかどうかを確認できます。問題が発生した場所を特定するのに役立つ場合があります。たとえば、ローカルtable参照が意図したものを隠している場合などです。

于 2013-01-16T06:58:24.440 に答える