Java 更新JFrame时遇到问题

Java 更新JFrame时遇到问题,java,swing,jframe,Java,Swing,Jframe,我对java有点陌生,所以放松点。我试着做一个简单的游戏,每次你点击一个按钮,它就会向一个变量添加一个。这一切都很好,但我也尝试将变量显示到我的JFrame中。这就是问题所在,我单击按钮,它确实向我的变量添加了一个(我将变量打印到控制台以确保),但JFrame没有更新变量。我还应该注意,当你第一次打开游戏时,它会打开一个窗口,允许你输入用户名,这是在一个单独的类中,它包含了我的主方法。这是我的第二个窗口的代码,有问题的窗口: import javax.swing.BorderFactory;

我对java有点陌生,所以放松点。我试着做一个简单的游戏,每次你点击一个按钮,它就会向一个变量添加一个。这一切都很好,但我也尝试将变量显示到我的JFrame中。这就是问题所在,我单击按钮,它确实向我的变量添加了一个(我将变量打印到控制台以确保),但JFrame没有更新变量。我还应该注意,当你第一次打开游戏时,它会打开一个窗口,允许你输入用户名,这是在一个单独的类中,它包含了我的主方法。这是我的第二个窗口的代码,有问题的窗口:

import javax.swing.BorderFactory;

public class Game extends JFrame {
    private static final long serialVersionUID = 1L;

    private JPanel contentPane;

    private String name;

    public static int pennies = 0;
    public static int dollars = 0;
    public static int moneyAddRate = 1;

    private JButton btnAddMoney = new JButton(new ImageIcon("C:\\Users\\Tanner\\git\\Money-Bags\\res\\coins\\oneCent.png"));

    private Border emptyBorder = BorderFactory.createEmptyBorder();

    public Game(String name) {
        this.name = name;
        createWindow();
    }

    private void createWindow() {
        setTitle(name + "'s Economy");
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        btnAddMoney.setBounds(329, 244, 96, 96);
        btnAddMoney.setBorder(emptyBorder);
        contentPane.add(btnAddMoney);
        btnAddMoney.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                addMoney();
            }
        });

        JLabel lblPennies = new JLabel("You have " + pennies + " Pennies");
        lblPennies.setBounds(10, 11, 152, 24);
        contentPane.add(lblPennies);

        JLabel lblDollars = new JLabel(dollars + " Dollars");
        lblDollars.setBounds(10, 70, 152, 24);
        contentPane.add(lblDollars);

        JLabel lblAnd = new JLabel("&");
        lblAnd.setBounds(10, 45, 61, 14);
        contentPane.add(lblAnd);

        setVisible(true);

    }

    private void addMoney() {
        pennies += moneyAddRate;
        System.out.println(pennies + "  " + dollars);
        contentPane.validate();
        contentPane.repaint();

    }
}

它没有更新,因为您没有使用新的
便士
金额更新任何
组件
。您的
addMoney()
方法应该如下所示:

private void addMoney() {
pennies += moneyAddRate;
lblPennies.setText(String.format("You have %d pennies", pennies));
lblPennies.repaint();
}

在您的
addMoney()
方法中,您在哪里更新
组件?您需要使用更改后的
便士
金额再次设置
lblPennies
的文本。1)对代码、输入/输出和结构化文档(如HTML)使用代码格式。为此,请选择示例并单击消息发布/编辑表单上方的
{}
按钮。2) javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。为了组织一个健壮的GUI组件,可以使用布局管理器,或者使用布局填充和边框。我爱你,我已经在Google上搜索了一整天试图解决我的问题,我发现的大部分内容让我相信repaint()方法可以解决我所有的问题。再次感谢你。