2015-09-17 32 views
0

嗨我有這個循環創建按鈕之間的間隔和每個數字我想知道如何訪問這些按鈕的動作偵聽器?如何訪問從未被形式聲明的按鈕?

////FOR EACH DATE 
    for (int i=(timeLine.getInterval())[0]; i<(timeLine.getInterval())[1] +1; i++) 
    { 
    listPanel.add(new JButton(""+i)); 

    }  

Normaly我這樣做:

button.addActionListener(new ActionListener()... 

,但我沒有一個名稱設置爲我的任何按鈕,因爲ammount的是不確定的。謝謝:)

+1

這是一個非常寬泛的問題,根據您實際需要可以有很多正確的答案。 'listPanel.get(index).addActionListener()..'你可以得到引用,並在這種情況下添加一個類似這樣的監聽器。 – user2651804

回答

0

您需要編寫一個可用於所有按鈕的通用ActionListener。 ActionListener將獲取事件的來源,然後使用按鈕中的信息來執行處理。

例如這裏是如何創建一個簡單的「計算器面板」通過使用具有相同的功能按鈕:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.*; 

public class CalculatorPanel extends JPanel 
{ 
    private JTextField display; 

    public CalculatorPanel() 
    { 
     Action numberAction = new AbstractAction() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
//    display.setCaretPosition(display.getDocument().getLength()); 
       display.replaceSelection(e.getActionCommand()); 
      } 
     }; 

     setLayout(new BorderLayout()); 

     display = new JTextField(); 
     display.setEditable(false); 
     display.setHorizontalAlignment(JTextField.RIGHT); 
     add(display, BorderLayout.NORTH); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.setLayout(new GridLayout(0, 5)); 
     add(buttonPanel, BorderLayout.CENTER); 

     for (int i = 0; i < 10; i++) 
     { 
      String text = String.valueOf(i); 
      JButton button = new JButton(text); 
      button.addActionListener(numberAction); 
      button.setBorder(new LineBorder(Color.BLACK)); 
      button.setPreferredSize(new Dimension(30, 30)); 
      buttonPanel.add(button); 

      InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 
      inputMap.put(KeyStroke.getKeyStroke(text), text); 
      inputMap.put(KeyStroke.getKeyStroke("NUMPAD" + text), text); 
      button.getActionMap().put(text, numberAction); 
     } 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("Calculator Panel"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new CalculatorPanel()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
0

你需要指定新按鈕的臨時變量,你需要能夠在動作中使用「金額」:

for (int i=(timeLine.getInterval())[0]; i<(timeLine.getInterval())[1] +1; i++) 
    { 
    JButon b = new JButton(""+i); 
    final int amount = i; 
    b.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      // do something with amount 
      aplyAmount(amount); 
     } 

    }); 
    listPanel.add(b); 

    }