2012-11-04 26 views
3
JPanel p = new JPanel(); 
    p.setLayout(new GridLayout(4, 4, 5, 5)); 
    String[] buttons = { 
     "1", "2", "3", "/", "4", 
     "5", "6", "*", "7", "8", "9", "-", "0", ".", "=", "+" 
    }; 
    for (int i = 0; i < buttons.length; i++) { 
      p.add(new JButton(buttons[i])); 
    add(p); 

此代码产生了很好的计算器布局有没有办法addActionListener方法,每个按钮,而在同一时间保持这种布局 我的意思是不这样做的每每个按钮都是这样。是有办法addActionListener方法,该代码

JButton button1 = new JButton("1"); 
    button1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
// interesting code for button1 goes here 
     } 
    }); 

回答

2

我做到了使用此代码...

String[] buttons = { 
     "1", "2", "3", "/", "4", 
     "5", "6", "*", "7", "8", "9", "-", "0", ".", "=", "+" 
    }; 

    Action[] allActions = new Action[buttons.length]; 

    for (i = 0; i < buttons.length; i++) { 

     allActions[i] = new ButtonAction(buttons[i],i); 

     JButton button = new JButton(allActions[i]); 

      panel.add(button); 


     } 

与类ButtonAction如下

public class ButtonAction extends AbstractAction 
    { 
int i; 
    public ButtonAction(String text, int i) { 
    super(text); 
    this.i = i; 
    } 
    public void actionPerformed(ActionEvent e) { 
    /* you can put any action here. either make the action depend on array value or 
     the string text */ 
    System.out.println(i); 

    } 
} 
+0

也考虑'列表

4

是,代替的String阵列,具有Action实例的数组。每个这样的Action都有一个名字,也是ActionListener。引用了几个例子here

+1

谢谢你,我会检查出来现在 – Meesh

+0

我回答它使用您的建议..我下面贴的答案 – Meesh

2

从我的经验,你可以创建按钮,列表和循环运行添加ActionListener

List<JButton> buttonsList = new ArrayList<JButton>(buttons.length): 

for (JButton currButton : buttonsList) { 

     currButton.addActionListener(){ 
     .... 
     } 
    .... 
} 
+0

+1为'清单'。 – trashgod

3

你可以简单地添加ActionListener到每个按钮在你for循环在AbstractAction形式:

for (int i = 0; i < buttons.length; i++) { 
    JButton button = new JButton(buttons[i]); 
    button.addActionListener(new MyAction()); 
    p.add(button); 
} 

其中

class MyAction extends AbstractAction { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
    ... 
    } 
} 
相关问题