[英]JButton array ActionListener
簡而言之,我想將一堆JButton
累積到一個數組中,並為該數組創建一個ActionListener
類。
我正在嘗試創建一個計算器,所有帶編號的按鈕,例如“6”,都在一個JButton
數組中,因為我想讓它把設置的數字輸入到一個臨時的 int 中,這樣創建起來會更容易一種方法,而不是 10 個。我還有 40 個其他按鈕,我想將相同的主體應用到不同的數組中,因此將它們放入幾個ActionListener
方法中會更快更容易,其中按鈕數據實現到該方法。 這是我的代碼:
private JButton num0, num1, num2, num3, num4, num5, num6, num7, num8, num9;
private JButton numArray[] = {num0, num1, num2, num3, num4, num5, num6, num7, num8, num9};
public GUI(){
numArray.AddActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
}
});
}
你可以考慮Newb Monad的提議。 但是,您可以對所有按鈕使用相同的偵聽器,如下例所示。
public static void main(String[] args) {
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JButton) {
String text = ((JButton) e.getSource()).getText();
JOptionPane.showMessageDialog(null, text);
}
}
};
JPanel panel = new JPanel(new GridLayout(4,3));
JButton[] array = new JButton[10];
for (int i = 0; i < array.length; i++) {
array[i] = new JButton(String.valueOf(i));
array[i].addActionListener(listener);
panel.add(array[i]);
}
JOptionPane.showMessageDialog(null, panel);
}
你有正確的想法。 但是,數組對象沒有addActionListener()
方法。 您必須為每個JButton
單獨添加一個動作偵聽器。 您可以為每個按鈕使用相同的偵聽器,但是您必須確定在actionPerformed()
方法中單擊了哪個按鈕。 IMO,更簡潔的解決方案是為每個 JButton 分配一個單獨的偵聽器,因為這樣每個 ActionListener 都可以知道按下了哪個數字,而無需檢查事件源。 例如,您可以創建一個NumberButtonListener
類,該類將int
作為其構造函數的唯一參數。 然后,您可以在一個小循環中同時創建 JButton 和相應的NumberButtonListener
。
我在“連接四”游戲的二維按鈕陣列中遇到了類似的問題。 我能夠在 ActionListener 中使用 for 循環來測試我的哪些按鈕被按下了。 關鍵是修改我的按鈕類中的 toString() 方法以將數組元素作為字符串提供:
在 JPanel 類定義中:...
discs = new RoundButton[6][7]; //my 2D array
...
public class RoundButton extends JButton {
...
public String toString() {
return "discs["+i+"]["+j+"]";
}
...
}
private class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
for (int i = 0; i < discs.length; i++){
for (int j= 0; j < discs[i].length; j++){
if (event.getSource() == discs[i][j]){
discs[i][j].setIcon(yellowDisc); //my particular action for that button
}
}
抱歉,這很混亂。 我以前從來沒有在這里發過帖子。
這似乎對我很有效。 我基本上循環遍歷所有按鈕,同時根據操作(e.getSource())檢查它。
public void actionPerformed(ActionEvent e){
//loop through allbuttons to check if clicked
for(int i = 0; i < buttonArr.length; i++){
for(int j = 0; j < buttonArr[0].length; j++){
if(e.getSource() == buttonArr[i][j]){
//do stuff
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.