0

単一のパネル「モールド」から動的に作成されている4つのパネルがあります。各パネルには、配列から設定されているパネルに関するさまざまな情報があります。問題は、情報が更新されると、セットの最後のパネルのみが変更されることです。

例:残りの移動数を明らかに示すMovesLeftラベルがあります。数が減ると、そのプレーヤーにリストされている数が変わるはずです。各プレーヤーは独自のパネルを持っています。現在、最後のパネルのMoveleftラベルのみが変更され、最後のプレーヤーだけでなく移動するすべてのプレーヤーに対して変更されます。したがって、プレーヤー1がすべての動きを使い果たすと、プレーヤー1のパネルではなくプレーヤー4のパネルに0が表示されます。

質問:正しいプレーヤーの情報が更新されるように、ラベルの4つのインスタンスのどれを変更するかを指定する方法はありますか?

パネルのセットアップ

    protected JComponent makeTextPanel(String text) {
    JPanel panel = new JPanel(false);
    //panel.add(filler);
    panel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    name = new JLabel(minirpg.MiniRPG.players.get(setupPlayerIndex).getName());
    c.insets = new Insets(5, 5, 5, 5);
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 2;
    panel.add(name, c);

    icon = new JLabel(MiniRPG.players.get(setupPlayerIndex).getIcon());
    c.gridx = 1;
    c.gridy = 2;
    panel.add(icon, c);

    lblClass = new JLabel("Class:");
    c.gridx = 1;
    c.gridy = 3;
    c.gridwidth = 1;
    panel.add(lblClass, c);

    pClass = new JLabel(MiniRPG.players.get(setupPlayerIndex).getclass());
    c.gridx = 2;
    c.gridy = 3;
    panel.add(pClass, c);

    lblRole = new JLabel("Role:");
    c.gridx = 1;
    c.gridy = 4;
    panel.add(lblRole, c);

    role = new JLabel(MiniRPG.players.get(setupPlayerIndex).getRole());
    c.gridx = 2;
    c.gridy = 4;
    panel.add(role, c);

    dash = new JLabel("--------------------STATS--------------------");
    c.gridwidth = 4;
    c.gridx = 1;
    c.gridy = 5;
    panel.add(dash, c);

    lblStr = new JLabel("Strengh:");
    c.gridwidth = 2;
    c.gridx = 1;
    c.gridy = 6;
    panel.add(lblStr, c);

    str = new JLabel(Integer.toString(
            minirpg.MiniRPG.players.get(setupPlayerIndex).getStr()));
    //c.insets = new Insets(5, 5, 5, 5);
    c.gridwidth = 1;
    c.gridx = 3;
    c.gridy = 6;
    panel.add(str, c);

    lblDex = new JLabel("Dexterity:");
    c.gridwidth = 2;
    c.gridx = 1;
    c.gridy = 7;
    panel.add(lblDex, c);

    dex = new JLabel(Integer.toString(
            minirpg.MiniRPG.players.get(setupPlayerIndex).getDex()));
    c.gridwidth = 1;
    c.gridx = 3;
    c.gridy = 7;
    panel.add(dex, c);

    lblEnd = new JLabel("Endurance:");
    c.gridwidth = 2;
    c.gridx = 1;
    c.gridy = 8;
    panel.add(lblEnd, c);

    end = new JLabel(Integer.toString(
            minirpg.MiniRPG.players.get(setupPlayerIndex).getEnd()));
    c.gridwidth = 1;
    c.gridx = 3;
    c.gridy = 8;
    panel.add(end, c);

    lblDex = new JLabel("Wisdom:");
    c.gridwidth = 2;
    c.gridx = 1;
    c.gridy = 9;
    panel.add(lblDex, c);

    wiz = new JLabel(Integer.toString(
            minirpg.MiniRPG.players.get(setupPlayerIndex).getWis()));
    c.gridwidth = 1;
    c.gridx = 3;
    c.gridy = 9;
    panel.add(wiz, c);

    lblHp = new JLabel("HP: ");
    c.gridx = 1;
    c.gridy = 10;
    panel.add(lblHp, c);


    health = new JLabel(Integer.toString(
            minirpg.MiniRPG.players.get(setupPlayerIndex).getHp()));
    c.gridx = 2;
    c.gridy = 10;
    panel.add(health, c);

    lblMoves = new JLabel("Moves Left: ");
    c.gridx = 1;
    c.gridy = 11;
    panel.add(lblMoves, c);

    movesLeft = new JLabel(Integer.toString(
            MiniRPG.players.get(setupPlayerIndex).getMoves()));
    c.gridx = 2;
    c.gridy = 11;
    panel.add(movesLeft, c);

    dash = new JLabel("--------------------SKILLS--------------------");
    c.gridwidth = 4;
    c.gridx = 1;
    c.gridy = 12;
    panel.add(dash, c);

    lblSkill1 = new JLabel("Skill 1:");
    c.gridwidth = 1;
    c.gridx = 1;
    c.gridy = 13;
    panel.add(lblSkill1, c);

    skill1 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill1());
    c.gridx = 2;
    c.gridy = 13;
    panel.add(skill1, c);

    lblSkill2 = new JLabel("Skill 2:");
    c.gridx = 1;
    c.gridy = 14;
    panel.add(lblSkill2, c);

    skill2 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill2());
    c.gridx = 2;
    c.gridy = 14;
    panel.add(skill2, c);
    skill2.setEnabled(false);

    lblSkill3 = new JLabel("Skill 3:");
    c.gridx = 1;
    c.gridy = 15;
    panel.add(lblSkill3, c);

    skill3 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill3());
    c.gridx = 2;
    c.gridy = 15;
    panel.add(skill3, c);
    skill3.setEnabled(false);

    lblSkill4 = new JLabel("Skill 4:");
    c.gridx = 1;
    c.gridy = 16;
    panel.add(lblSkill4, c);

    skill4 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill4());
    c.gridx = 2;
    c.gridy = 16;
    panel.add(skill4, c);
    skill4.setEnabled(false);        

    skill1.addActionListener(e);
    skill2.addActionListener(e);
    skill3.addActionListener(e);
    skill4.addActionListener(e);

    return panel;
}

パネルをGUIに追加する方法

final JTabbedPane characterInfoPane = new JTabbedPane();
    while (setupPlayerIndex < 4) {
        JComponent panel = makeTextPanel("");
        characterInfoPane.addTab(minirpg.MiniRPG.players.get(setupPlayerIndex).getName(), null, panel,
                "");
        setupPlayerIndex++;
    }

xが選択されたプレーヤーである関連ラベルを現在どのように変更しようとしているのか

movesLeft.setText(Integer.toString(MiniRPG.players.get(x).getMoves()));

私が探していることを行うことが可能かどうかというこの質問に答えるために追加コードが必要かどうかを教えてください。

4

1 に答える 1

3

新しいテキストペインを作成するたびに、変数参照を再割り当てします。つまり、movesLeft常に最後に作成したパネルを参照します。

でパネルを作成するのではなく、生成するmakeTextPaneすべての情報を含むカスタムパネルを作成しますmakeTextPane

次に、取得および更新する必要のあるすべての関連情報のセッターとゲッターを作成します。

例えば

protected class TextPane extends JPanel {

    private JLabel name;
    private JLabel icon;
    private JLabel lblClass;
    private JLabel pClass;
    private JLabel lblRole;
    private JLabel role;
    private JLabel lblStr;
    private JLabel str;
    private JLabel lblDex;
    private JLabel dex;
    private JLabel lblEnd;
    private JLabel end;
    private JLabel wiz;
    private JLabel lblHp;
    private JLabel health;
    private JLabel lblMoves;
    private JLabel movesLeft;
    private JLabel lblSkill1;
    private JButton skill1;
    private final JLabel lblSkill2;
    private final JButton skill2;
    private final JLabel lblSkill3;
    private final JButton skill3;
    private final JLabel lblSkill4;
    private final JButton skill4;

    public TextPane() {

        //add(filler);
        setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        JLabel dash;

        name = new JLabel(MiniRPG.MiniRPG.players.get(setupPlayerIndex).getName());
        c.insets = new Insets(5, 5, 5, 5);
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth = 2;
        add(name, c);

        icon = new JLabel(MiniRPG.players.get(setupPlayerIndex).getIcon());
        c.gridx = 1;
        c.gridy = 2;
        add(icon, c);

        lblClass = new JLabel("Class:");
        c.gridx = 1;
        c.gridy = 3;
        c.gridwidth = 1;
        add(lblClass, c);

        pClass = new JLabel(MiniRPG.players.get(setupPlayerIndex).getclass());
        c.gridx = 2;
        c.gridy = 3;
        add(pClass, c);

        lblRole = new JLabel("Role:");
        c.gridx = 1;
        c.gridy = 4;
        add(lblRole, c);

        role = new JLabel(MiniRPG.players.get(setupPlayerIndex).getRole());
        c.gridx = 2;
        c.gridy = 4;
        add(role, c);

        dash = new JLabel("--------------------STATS--------------------");
        c.gridwidth = 4;
        c.gridx = 1;
        c.gridy = 5;
        add(dash, c);

        lblStr = new JLabel("Strengh:");
        c.gridwidth = 2;
        c.gridx = 1;
        c.gridy = 6;
        add(lblStr, c);

        str = new JLabel(Integer.toString(
                MiniRPG.MiniRPG.players.get(setupPlayerIndex).getStr()));
        //c.insets = new Insets(5, 5, 5, 5);
        c.gridwidth = 1;
        c.gridx = 3;
        c.gridy = 6;
        add(str, c);

        lblDex = new JLabel("Dexterity:");
        c.gridwidth = 2;
        c.gridx = 1;
        c.gridy = 7;
        add(lblDex, c);

        dex = new JLabel(Integer.toString(
                MiniRPG.MiniRPG.players.get(setupPlayerIndex).getDex()));
        c.gridwidth = 1;
        c.gridx = 3;
        c.gridy = 7;
        add(dex, c);

        lblEnd = new JLabel("Endurance:");
        c.gridwidth = 2;
        c.gridx = 1;
        c.gridy = 8;
        add(lblEnd, c);

        end = new JLabel(Integer.toString(
                MiniRPG.MiniRPG.players.get(setupPlayerIndex).getEnd()));
        c.gridwidth = 1;
        c.gridx = 3;
        c.gridy = 8;
        add(end, c);

        lblDex = new JLabel("Wisdom:");
        c.gridwidth = 2;
        c.gridx = 1;
        c.gridy = 9;
        add(lblDex, c);

        wiz = new JLabel(Integer.toString(
                MiniRPG.MiniRPG.players.get(setupPlayerIndex).getWis()));
        c.gridwidth = 1;
        c.gridx = 3;
        c.gridy = 9;
        add(wiz, c);

        lblHp = new JLabel("HP: ");
        c.gridx = 1;
        c.gridy = 10;
        add(lblHp, c);


        health = new JLabel(Integer.toString(
                MiniRPG.MiniRPG.players.get(setupPlayerIndex).getHp()));
        c.gridx = 2;
        c.gridy = 10;
        add(health, c);

        lblMoves = new JLabel("Moves Left: ");
        c.gridx = 1;
        c.gridy = 11;
        add(lblMoves, c);

        movesLeft = new JLabel(Integer.toString(
                MiniRPG.players.get(setupPlayerIndex).getMoves()));
        c.gridx = 2;
        c.gridy = 11;
        add(movesLeft, c);

        dash = new JLabel("--------------------SKILLS--------------------");
        c.gridwidth = 4;
        c.gridx = 1;
        c.gridy = 12;
        add(dash, c);

        lblSkill1 = new JLabel("Skill 1:");
        c.gridwidth = 1;
        c.gridx = 1;
        c.gridy = 13;
        add(lblSkill1, c);

        skill1 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill1());
        c.gridx = 2;
        c.gridy = 13;
        add(skill1, c);

        lblSkill2 = new JLabel("Skill 2:");
        c.gridx = 1;
        c.gridy = 14;
        add(lblSkill2, c);

        skill2 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill2());
        c.gridx = 2;
        c.gridy = 14;
        add(skill2, c);
        skill2.setEnabled(false);

        lblSkill3 = new JLabel("Skill 3:");
        c.gridx = 1;
        c.gridy = 15;
        add(lblSkill3, c);

        skill3 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill3());
        c.gridx = 2;
        c.gridy = 15;
        add(skill3, c);
        skill3.setEnabled(false);

        lblSkill4 = new JLabel("Skill 4:");
        c.gridx = 1;
        c.gridy = 16;
        add(lblSkill4, c);

        skill4 = new JButton(MiniRPG.players.get(setupPlayerIndex).getSkill4());
        c.gridx = 2;
        c.gridy = 16;
        add(skill4, c);
        skill4.setEnabled(false);

        skill1.addActionListener(e);
        skill2.addActionListener(e);
        skill3.addActionListener(e);
        skill4.addActionListener(e);

    }

    public void setMovesLeft(int value) {
        movesLeft.setText(Integer.toString(value));
    }

}

次に、ペインを作成するときに、各ペインの個別の参照を保持します

final JTabbedPane characterInfoPane = new JTabbedPane();

TextPane[] textPanes = new TextPane[4];
while (setupPlayerIndex < 4) {
    textPanes[setupPlayerIndex] = new TextPane();
    characterInfoPane.addTab(minirpg.MiniRPG.players.get(setupPlayerIndex).getName(), null, textPanes[setupPlayerIndex],
            "");
    setupPlayerIndex++;
}

これにより、特定のプレーヤーの動きを、のアクセスセッターだけで変更できるようになります。TextPane

textPanes[x].setMovesLeft(MiniRPG.players.get(x).getMoves());
于 2012-08-27T01:51:00.557 に答える