2014-04-06 63 views
-2

按鈕,我需要一個偵聽器添加到每個按鈕像這樣:獲取幀

for(i = 0; i < 10; i++) 
    buttons[i].addActionListener(actionListener); 

的按鈕已經存在,而且我需要在我的畫面按鈕的列表。

+2

只需創建一個'按鈕[]'和'每次當Button'你動態創建它們添加到它(或查找使用'R'類) – hexafraction

+0

按鈕已經存在,我需要在我的框架中獲得按鈕列表 – user2976686

回答

1

您可以使用getComponents()方法獲取框架中的所有JButton。

工作示例:

frame = new JFrame(); 
frame.setVisible(true); 
frame.setSize(250, 250); 
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

GridLayout layout = new GridLayout(); 
frame.setLayout(layout); 

for (int i = 0; i < 10; ++i) 
    frame.getContentPane().add(new JButton("A")); 

Component[] components = frame.getContentPane().getComponents(); 
ActionListener actionListener = new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("Hello"); 
    } 
}; 

for (Component component : components) 
{ 
    if (component instanceof JButton) 
    { 
     ((JButton) component).addActionListener(actionListener); 
    } 
} 

它增加了10個按鈕,然後添加監聽器。

提示:不要這樣做,如果您創建按鈕dinamically,它只是矯枉過正!

以上可以更簡單:

frame = new JFrame(); 
frame.setVisible(true); 
frame.setSize(250, 250); 
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

GridLayout layout = new GridLayout(); 
frame.setLayout(layout); 

ActionListener actionListener = new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("Hello"); 
    } 
}; 

for (int i = 0; i < 10; ++i) 
{ 
    JButton button = new JButton("A"); 
    button.addActionListener(actionListener); 
    frame.getContentPane().add(button); 
} 

相同的代碼,無需兩臺維權!

但是,如果你不知道多少按鈕,你將有第一個代碼就可以,如果你知道並且你只是想在事情發生之前避免一個動作,可以考慮使用一個布爾變量。

喜歡的東西:

// out 
boolean specialEvent; 

// inside 
ActionListener actionListener = new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     if (!specialEvent) return; // the special event is still false so no you can't do anything 
     System.out.println("Hello"); 
    } 
};