我有一个JFrame“GameWindow”和一个名为“Combat”的类。
我正在尝试从Combat类中的变量更新GameWindow(JLabels,JProgressBars等)中的各种组件。但是,细节似乎永远不会更新。请考虑以下事项:
public class Combat {
public static String attackName1;
public static String pUnitName;
public static void setPlayerUnit(GameUnit u) {
attackName1 = u.getAttackName1();
pUnitName = u.getName().toUpperCase();
}
}
和
public GameWindow() {
initialize();
gameFrame.setVisible(true);
}
private void initialize() {
gameFrame = new JFrame();
gameFrame.setResizable(false);
gameFrame.setTitle("GameWindow");
gameFrame.setBounds(100, 100, 800, 480);
gameFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JButton pAttack1 = new JButton(Combat.attackName1); //<--------NOT BEING CHANGED
sl_gamePanel.putConstraint(SpringLayout.NORTH, pAttack1, 0, SpringLayout.NORTH, gameTextPanel);
sl_gamePanel.putConstraint(SpringLayout.WEST, pAttack1, 6, SpringLayout.EAST, textAttackSeparator);
sl_gamePanel.putConstraint(SpringLayout.SOUTH, pAttack1, 34, SpringLayout.NORTH, gameTextPanel);
sl_gamePanel.putConstraint(SpringLayout.EAST, pAttack1, 157, SpringLayout.EAST, textAttackSeparator);
gamePanel.add(pAttack1);
JLabel pMobName = new JLabel(Combat.pUnitName); //<--------NOT BEING CHANGED
sl_pPanel.putConstraint(SpringLayout.NORTH, pMobName, 10, SpringLayout.NORTH, pPanel);
sl_pPanel.putConstraint(SpringLayout.WEST, pMobName, 129, SpringLayout.WEST, pPanel);
pPanel.add(pMobName);
为什么按钮/ JLabel的文本没有更新?我需要使用“Combat.variable”更改为“Combat.getVariable()”吗?这是否可能,如果是这样,我怎样才能使它发挥作用?
答案 0 :(得分:2)
你说:
JButton pAttack1 =新的JButton(Combat.attackName1);如上所述,在更改战斗类中的变量时,JButton上的文本不会更新。
您将引用变量与它所代表的对象混淆,需要了解它们是不同的。虽然最初Combat.attackName1和JButton的名称引用相同的String对象,但字符串是不可变的。当您更改变量引用的String对象时,这将不会影响JButton显示的String。解决方案:如果要更改其显示的文本,请调用JButton的setText(...)
方法。