import java.awt.*;
import java.awt.event.*;
class MyTest {
public static void main(String args[]){
MyFrame frame= new  MyFrame ();
frame.show();
}

}class MyFrame extends Frame{
public MyFrame (){
this.setTitle("测试按钮事件");
this.setSize(200,200);
MyPanel panel =new MyPanel();
this.add(panel);
}
}
class MyPanel extends Panel{
public MyPanel(){
Button bButton=new Button("蓝色");
Button gButton=new Button("绿色");
Button rButton=new Button("红色");
Button eButton=new Button("退出");
this.add(bButton);
this.add(gButton);
this.add(rButton);
this.add(eButton);
/* MyListenerAction baction=new MyListenerAction(Color.blue);
MyListenerAction gaction=new MyListenerAction(Color.green);
MyListenerAction raction=new MyListenerAction(Color.red);
MyListenerAction eaction=new MyListenerAction(Color.white);*/

rButton.addActionListener(new MyListenerAction(Color.red));//注册监听器
gButton.addActionListener(new MyListenerAction(Color.green));
bButton.addActionListener(new MyListenerAction(Color.blue));
eButton.addActionListener(new MyListenerAction(Color.red));

}

class MyListenerAction implements ActionListener{ //实现监听器
  private Color bgColor;
public  MyListenerAction(Color c){
bgColor=c;
}
public void actionPerformed(ActionEvent e){
setBackground(bgColor);   //????
repaint();
if(e.getActionCommand()=="退出")
System.exit(0);
}
}

}我想知道的是actionPerformed(ActionEvent e)中setBackground(bgColor);这一句话为什麽改变的是
面板的背景色?而不是其他组件的背景色?谢谢!

解决方案 »

  1.   

    你用的方法不对把,我想方法可能是setForeground(bgColor)或者是setColor(bgColor)我不是很清楚,我也刚学,你试试看把,这样就可以改变按钮的颜色。
      

  2.   

    可能默认的是设置当前面版的背景色吧?你试试用Button.setBackground(),看看能不能设置按钮的背景色,我也是初学的
      

  3.   

    我觉得是actionPerformed(ActionEvent e)中setBackground(bgColor)作用就是设置背景颜色!其他当然不行了!
      

  4.   

    package edu.njust.cs;
    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.UIManager;public final class SetFont
    {    public SetFont()
        {
        } public static void setFontSimple(Font font)
        {
    javax.swing.plaf.FontUIResource fontRes = new javax.swing.plaf.FontUIResource(font);
            java.util.Enumeration keys = UIManager.getDefaults().keys();
            while (keys.hasMoreElements())
            {
                Object key = keys.nextElement();
                Object value = UIManager.get (key);
                if (value instanceof javax.swing.plaf.FontUIResource)
                    UIManager.put (key, fontRes);
            }
        }
        
        public static void setFont(Font font)
        {
    UIManager.put("Label.font", font);
            UIManager.put("Button.font", font);
            UIManager.put("Menu.font", font);
            UIManager.put("MenuItem.font", font);
            UIManager.put("CheckBoxMenuItem.font", font);
    UIManager.put("CheckBoxButtonMenuItem.font", font);
    UIManager.put("RadioButtonMenuItem.font", font);
            UIManager.put("RadioMenuItem.font", font);
    UIManager.put("JRadioMenuItem.font", font);
            UIManager.put("List.font", font);
            UIManager.put("CheckBox.font", font);
            UIManager.put("RadioButton.font", font);
            UIManager.put("ComboBox.font", font);
            UIManager.put("TextArea.font", font);
            UIManager.put("Table.font", font);
            UIManager.put("TableHeader.font", font);
            UIManager.put("TabbedPane.font", font);
            UIManager.put("Pane.font", font);
            UIManager.put("Frame.font", font);
            UIManager.put("EditorPane.font", font);
            UIManager.put("OptionPane.font", font);
    UIManager.put("JOptionPane.font", font);
            UIManager.put("TextPane.font", font);
            UIManager.put("TextField.font", font);
            UIManager.put("PasswordField.font", font);
            UIManager.put("Dialog.font", font);
            UIManager.put("Toolbar.font", font);
            UIManager.put("ToolTip.font", font);
            UIManager.put("Slider.font", font);
            UIManager.put("Progress.font", font);
            UIManager.put("FileChooser.font", font);
            UIManager.put("ColorChooser.font", font);
    UIManager.put("TitledBorder.font", font);
        }
    }
      

  5.   

    内部类可以调用外部类的方法,比如MyListenerAction类就可以调用MyPanel类的方法setBackground(它是从Panel继承下来的),而actionPerformed(ActionEvent e)中setBackground(bgColor) 要想调用MyPanel类中的其他组件如bButton,它就要显示的引用bButton.setBackground
      

  6.   

    FOX7899(bk) 何意?
    未明白
    要改变按钮背景色,因为你分了N个类,有监听类是内部类,你可以把按钮定义成成员组件,然后设置它的背景色