繁体   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