[英]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.