2014-05-04 79 views
0

我需要創建更多的按鈕。我如何做到這一點,讓聽衆知道b1已被按下,並將背景改爲鮭魚的hashmap值。這樣,當我創建更多的按鈕時,它將知道哪個按鈕被按下,並將背景更改爲與該按鈕相關的顏色。我不知道該怎麼辦。我如何讓聽衆注意到哪個按鈕被按下

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

import javax.swing.*; 




public class Collection extends JFrame { 
    JPanel panel1 = new JPanel(); 
    public Collection(){ 
     Listen react = new Listen(); 
     Map<String, String> hashmap = new HashMap<String, String>(); 
    setLayout(new BorderLayout()); 



     hashmap.put("Salmon","#FA8072"); 

     JRadioButton b1 = new JRadioButton(hashmap.get("Salmon")); 
     b1.addActionListener(react); 
     panel1.add(b1); 

     add(panel1, BorderLayout.CENTER); 
    } 





class Listen implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 

     panel1.setBackground();}} 

public static void main(String[] args){ 
    Collection c = new Collection(); 
    c.setSize(300,300); 
    c.setLocationRelativeTo(null); 
    c.setTitle("colors"); 
    c.setDefaultCloseOperation(c.EXIT_ON_CLOSE); 
    c.setVisible(true); 
}} 

回答

2

public void actionPerformed(ActionEvent e)你可以使用e.getSource()以確定事件的根源的方法。您可以使用b1.setName設置按鈕的名稱,然後執行類似((JRadioButton)e.getSource()).getName()的操作來檢索它並確定按下哪個按鈕。或者,您可以使用b1.putClientProperty("id", someObject)來達到同樣的目的。

0

嘗試將顏色信息添加到Listen類:創建一個構造函數,該構造函數接受每個Listen實例都保存顏色信息的Color或String。然後,在您調用panel1.setBackground()的地方,使用已存儲的顏色信息指定顏色。

也許是這樣的:

class Listen implements ActionListener { 
    Color myColor; 
    public Listen (Color newColor) { 
      myColor = newColor; 
    } 
    public void actionPerformed (ActionEvent e) { 
      panel1.setBackground(myColor); 
    } 
} 

然後在您的收藏類,

Listen react = new Listen(); 

成爲

Listen react = new Listen(hashmap.get("Salmon")); 

,因此,點擊您的按鈕時,面板將變成黑色。我想你將不得不重新設計你的HashMap系統,我認爲它很棒,但它必須將字符串映射到顏色。您可以使用顏色構造函數,該構造函數採用可以指定特定顏色的紅色,藍色和綠色值。例如,你的鮭魚顏色將是FA = 250,80 = 128,72 = 114,所以hashmap.put(「鮭魚」,新顏色(250,128,114));

如果您有任何疑問,請告訴我!

0

研究觀察者模式。您可以將觀察者附加到一個對象,該對象將根據觀察對象的不同來改變它所附着的對象。這個想法是你可以附加儘可能多的觀察者,並相應地改變附件的狀態。特別適用於動作偵聽器和按鈕偵聽器。