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

I have Four Panels being dynamically created from a single panel "Mold" each panel has different information on it being set from an array. Problem is that when the information updates only the last panel in the set changes.

Example: there is a MovesLeft label that shows obviously the number of moves left. As the number goes down the number listed for that player should change, each player having their own panel. Currently only the last panel's Moveleft Label changes and changes for any player who moves not just the last Player. So if Player 1 uses up all his moves it will show 0 on Player 4's panel rather than on player 1's Panel.

Question: is there a way for me to specify which of the four instances of the label I want to change so that the correct player's info gets updated?

Panel Set up

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

How the Panel is added to the GUI

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

how I am currently trying to change the relavent Label where x is the selected Player

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

please let me know if addition code is needed to Answer this Question of if it is possible to do what im looking for.

Answers


Every time you create a new text pane, you are reassign the variable references. That is, movesLeft will ALWAYS refer to the last panel you created.

Rather then creating the panels in the makeTextPane, I would create a custom panel that contained all the information that makeTextPane produces.

I would then make setters & getters for all the relevent information you need to get and update.

For example

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

}

I would then keep a separate reference of each pane when I create it

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

This would then allow me to change a particular players moves simply by access setter of the TextPane

textPanes[x].setMovesLeft(MiniRPG.players.get(x).getMoves());

Need Your Help

HBase master won't start, Can't connect to hbase.rootdir

apache hadoop amazon-ec2 localhost hbase

I'm trying to run HBase in a pseudo-distributed mode based on the setup on the apache website, but I'm having trouble configuring the hbase.root directory correctly.

Look at the last edited information of a Plist file

iphone plist editing

Is there any way you can get the last edited time off a file? I have a pList on a server that download to my app. I would like to look at the time it was last edited. Do I have to implement a speci...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.