簡體   English   中英

Java,在同一面板聲明中創建的4個面板中的1個面板上更改標簽文本

[英]Java, Change label Text on 1 of 4 panels created from the same panel declaration

我有四個面板是從單個面板“模具”動態創建的,每個面板具有從數組設置的不同信息。 問題是,當信息更新時,集合中的最后一個面板才會更改。

示例:有一個MovesLeft標簽,可以清楚地顯示剩余的移動數量。 隨着人數的減少,為該玩家列出的人數應更改,每個玩家都有自己的面板。 當前,只有最后一個面板的“向左移動標簽”會發生變化,並且對於僅移動最后一個Player的任何玩家都會發生變化。 因此,如果玩家1用盡了所有移動,它將在玩家4的面板上顯示0,而不是在玩家1的面板上顯示0。

問題:我可以通過某種方式指定要更改標簽的四個實例中的哪一個,以便更新正確的玩家信息?

面板設置

    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++;
    }

我目前如何嘗試更改relavent標簽,其中x是選定的播放器

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

請讓我知道是否需要附加代碼來回答這個問題,如果有可能做我正在尋找的。

每次創建新的文本窗格時,都會重新分配變量引用。 也就是說, 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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM