Java JFrame中的更新信息

Java JFrame中的更新信息,java,swing,user-interface,jframe,Java,Swing,User Interface,Jframe,我有一个JFrame“GameWindow”和一个名为“Combat”的类 我试图从战斗类的变量更新GameWindow中的各种组件(JLabels、JProgressBars等)。然而,细节似乎从未更新。考虑以下事项: public class Combat { public static String attackName1; public static String pUnitName; public static void setPlayerUnit(GameUnit u) {

我有一个JFrame“GameWindow”和一个名为“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();
    }
}
以及:

公共游戏窗口(){
初始化();
gameFrame.setVisible(true);
}
私有void initialize(){
gameFrame=newjframe();
游戏框架。可设置大小(假);
gameFrame.setTitle(“游戏窗口”);
游戏框架。后退(100100800480);
gameFrame.setDefaultCloseOperation(JFrame.DO\u NOTHING\u ON\u CLOSE);
JButton pAttack1=新JButton(batch.attackName1);//您声明:

JButton pAttack1=new JButton(batch.attackName1);如上所述,当更改Combat类中的变量时,JButton上的文本不会更新


您将引用变量与其表示的对象混淆,需要了解它们是不同的。虽然最初Combat.attackName1和JButton的名称引用同一个字符串对象,但字符串是不可变的。当您更改变量引用的字符串对象时,这对显示的字符串没有影响解决方案:调用JButton的
setText(…)< /代码>方法,如果你想改变它的显示文本。< /p>根本不起作用。我看不出你的鼠标器中有任何代码,所以肯定不会做任何事情。顺便说一下,不要使用JButter的Joucliistor。使用ActualListor作为教程,我确信你会阅读。如果你仍然需要帮助,考虑创建和发布。一个非常小的简单程序,它编译、运行并向我们展示您的问题,并且只执行此操作,而不执行其他操作,一个“我正在尝试从Combat类中的变量更新GameWindow中的各种组件(JLabels、JProgressBars等)。为什么这不起作用?”在上面的代码中,您在哪里向我们展示了您这样做的尝试?代码中的哪些内容不起作用?同样,请摆脱鼠标侦听器,并使用ActionListener作为JButton。“整个JFrame代码非常长。”为了更快地获得更好的帮助,请发布一条消息。
 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);