2011-11-02 21 views
1

任何人都知道如何將號碼存儲到JButtons?例如,每次用戶按下按鈕時,我都想記錄該號碼。GUI - 分配給按鈕的錄製號碼

+1

你是指「*記錄*」和「*在JButtons *上存儲數字」的含義? – mre

+0

我猜你的最終目標不是從JButtons中檢索數字。你的問題聽起來像你試圖以一種可能的迂迴方式來實現某些東西。你想從更廣義的角度去做什麼,這個案例的具體細節是什麼?這些數字需要在哪裏結束?存儲和記錄都可以引用各種各樣的東西。 – Dogmatixed

+1

有關可以滿足整個規範的代碼,請參閱[本答案](http://stackoverflow.com/questions/7441625/how-to-find-a-button-source-in-awt-calculator-homework/7441804# 7441804)。 –

回答

3

您應該使用的ActionListener,和您可以使用列表,如下所示:

enter image description here

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 


public class NumberButtons extends JFrame { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new NumberButtons().setVisible(true); 
      } 
     }); 
    } 
    private List<JButton> buttons = new ArrayList<JButton>(); 
    private ActionListener listener = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      int index = buttons.indexOf(e.getSource()); 
      System.out.println("Number " + index + " pressed");   
     } 
    }; 
    public NumberButtons() { 
     JPanel pNum = new JPanel(); 
     pNum.setLayout(new GridLayout(3,4)); 
     for (int i = 0; i < 10; ++i) { 
      JButton b = new JButton("" + i); 
      b.addActionListener(listener); 
      pNum.add(b); 
      buttons.add(b); 
     } 
     this.add(pNum); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
    } 
} 
1

我假設你有一個班,其中有一個按鈕,你點擊。使這個類實現一個監聽器接口。如果我沒有記錯,界面是ActionListener,方法是actionPerformed。在這種方法中,增加該特定按鈕的計數器。例如,您可以將號碼存儲在HashMap<JButton, Integer>中。

1

只是鏈接的ActionListener到您的按鈕,並在每次actionPerformed callbak被調用時增加一個變量:

yourButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     variable++; 
    } 
}); 

有關詳細信息,你可以閱讀官方documentation

0

這是一個快速的JButton子類,它可以做你想做的事。是的,它可以在沒有子類化的情況下完成,但如果你想修改JButton的行爲(所以它有一個額外的狀態就像在這種情況下),子類化是一個很好的選擇。

public class CountButton extends JButton implements ActionListener { 
    private int count; 

    CountButton() { 
     super(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     ++count; 
    } 

    public int getCount() { 
     return count; 
    } 

} // CountButton class