2013-08-17 56 views
0

我對Java很陌生,所以放輕鬆點。我試圖做一個簡單的遊戲,每次你點擊一個按鈕時,它會將一個變量添加到變量中。這一切工作正常,但我也試圖顯示變量給我的JFrame。這是麻煩來了,我點擊按鈕,它確實添加了一個到我的變量(我打印變量到控制檯肯定),但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(); 

    } 
} 
+0

在你的'addMoney()'方法中你甚至會更新一個'Component'?您需要使用已更改的「便士」金額再次設置「lblPennies」的文本。 –

+0

1)使用代碼格式化代碼,輸入/輸出和結構化文檔,如HTML。爲此,請選擇樣本並單擊郵件發佈/編輯表單上方的「{}」按鈕。 2)Java GUI可能需要在多種平臺上工作,使用不同的屏幕分辨率並使用不同的PLAF。因此,它們不利於組件的準確放置。爲了組織強大的圖形用戶界面,請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[空格]的佈局填充和邊框(http: //stackoverflow.com/q/17874717/418556)。 –

回答

2

它並沒有更新,因爲你是不是新pennies量更新任何Component。你的addMoney()方法應該看起來像這樣:

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

我愛你,我一整天都在搜索Google,試圖解決我的問題,大部分我發現讓我相信repaint()方法可以解決我所有的問題。再次感謝你。 – Tdude179