JButton b1 = new JButton("Press");
JButton b2 = new JButton("color");
b1.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    b2.setBackground(Color.red);  
  }
})
我的两个panel都是定义了自己的类后实现的???
贴你的代码把,大家一起看看!

解决方案 »

  1.   

    干吗不放一个panel里呢?两个panel里有点麻烦的
      

  2.   

    我们老师要求写两个panel,这是我写的,大家给看看
    public class w2
    {  
    public static void main(String[] args)
    {  
    FrameSize frame = new FrameSize();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show(); 

    }
    }class FrameSize extends JFrame
    {
    public FrameSize() //gouzaofangfa
    {
    setTitle("w2");
    setSize(400,400);

    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension screen = tk.getScreenSize();

    int screenHeight = screen.height;
    int screenWidth = screen.width;

    setLocation((screenWidth / 2)-200, (screenHeight / 2)-200);

    setResizable(false);
     
    Image img = tk.getImage("icon.gif");
    setIconImage(img);

    buttonpanel panel1=new buttonpanel();
    buttonpanel1 panel2=new buttonpanel1();

    Container aaa=getContentPane();
    aaa.add(panel1,BorderLayout.NORTH);
    aaa.add(panel2,BorderLayout.CENTER);


    }
    class buttonpanel extends JPanel implements ActionListener
    {
    public buttonpanel()
    {
    setLocation(50,25);
    setSize(350,100);

    button1=new JButton("button 1");
    button2=new JButton("button 2");

    add(button1);
    add(button2);

    button1.addActionListener(this);
    button2.addActionListener(this);

    }
    public void actionPerformed(ActionEvent event)
    {
    Object source=event.getSource();

    if (source==button1 || source==button2)
    {
     button1.setBackground(Color.red);
     button2.setBackground(Color.red);
     setBackground(Color.green);   
    }
    repaint();
    }
    private JButton button1;
    private JButton button2;}
    class buttonpanel1 extends JPanel 
    {
    public buttonpanel1()
    {
    setLocation(250,25);
    setSize(150,100);

    button3=new JButton("button 3");
    button4=new JButton("button 4");

    add(button3);
    add(button4);

    image = Toolkit.getDefaultToolkit().getImage("HLPCD.GIF");

        MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(image, 1);
    try
    {
    tracker.waitForID(1); 


    catch (InterruptedException exception) 
    {}

    buttonaction buttonaction4=new buttonaction("button 4");

    button4.addActionListener(buttonaction4);

    }
    public void paintComponent(Graphics g)
    {  
    super.paintComponent(g);

    if (ButtonText=="button 4")
    {
    g.drawImage(image,50,150,null);
    }       
    }
    private class buttonaction implements ActionListener  
    {
    public buttonaction(String text)
    {
    clicktext=text;
    }
    public void actionPerformed(ActionEvent event)
    {
    ButtonText=clicktext;
    repaint();
    }
    private String clicktext;
    }
    private JButton button3;
    private JButton button4;
    private Image image;
    public String ButtonText="";


    }
      

  3.   

    我也知道要注册监听器,可是他们是两个不同的panel类,怎么实现???
      

  4.   

    修改如下:一共两个类
    package info.bioz.test;import javax.swing.*;
    import java.awt.*;/**
     * <p>File: FrameSize.java</p>
     * <p><a href="http://www.bioz.info/">BIOZ.info</a> Copyright (c) 2004</p>
     *
     * @author <a href="mailto:[email protected]">Chance</a>
     */
    public class FrameSize extends JFrame {
        public FrameSize() {
            setTitle("w2");
            
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension screen = tk.getScreenSize();
            
            int screenHeight = screen.height;
            int screenWidth = screen.width;
            
            setLocation((screenWidth / 2)-200, (screenHeight / 2)-200);
            
            setResizable(false);
            
            Image img = tk.getImage("icon.gif");
            setIconImage(img);
            JButton btn1=new JButton("button 1");
            JButton btn2=new JButton("button 2");
            JButton btn3=new JButton("button 3");
            JButton btn4=new JButton("button 4");
            
            ButtonPanel panel1=new ButtonPanel(btn1,btn2);
            ButtonPanel panel2=new ButtonPanel(btn3,btn4);
            panel1.addActionListener(panel2);
            panel2.addActionListener(panel1);
            
            Container content=getContentPane();
            content.add(panel1,BorderLayout.NORTH);
            content.add(panel2,BorderLayout.CENTER);
        }
        public static void main(String[] args) {
            FrameSize frame = new FrameSize();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.show();
        }
    }
      

  5.   

    package info.bioz.test;import javax.swing.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.*;/**
     * <p>File: ButtonPanel.java</p>
     * <p><a href="http://www.bioz.info/">BIOZ.info</a> Copyright (c) 2004</p>
     *
     * @author <a href="mailto:[email protected]">Chance</a>
     */
    public class ButtonPanel extends JPanel implements ActionListener {
        public ButtonPanel(JButton btn1,JButton btn2) {
            setLocation(50,25);
            setSize(350,100);
            
            button1=btn1;
            button2=btn2;
            add(button1);
            add(button2);
            posCur=0;
            setBackground(bgColor[posCur]);
            button1.setBackground(bgColor[posCur+1]);
            button2.setBackground(bgColor[posCur+1]);
        }
        public void addActionListener(ActionListener al){
            button1.addActionListener(al);
            button2.addActionListener(al);
        }
        public void actionPerformed(ActionEvent event) {
            setBackground(bgColor[posCur]);
            posCur=(posCur+1)%4;
            button1.setBackground(bgColor[posCur]);
            button2.setBackground(bgColor[posCur]);
            repaint();
        }
        static Color []bgColor={Color.YELLOW,Color.PINK,Color.RED,Color.GREEN};
        static int posCur;
        private JButton button1;
        private JButton button2;
    }
      

  6.   

    去掉ButtonPanel.java中这两句:(不起作用)
    setLocation(50,25);
    setSize(350,100);
      

  7.   

    回复人: chanceqw(★★★★★) 
    谢谢你,代码能实现功能,我是一个初学的,看你给的代码有点晕,不知道是怎么实现的,定义了两个公共类,它们是两个类,两个文件,通过什么实现调用,能给我讲讲吗。
    路过的人能帮帮我忙,想搞清楚是什么意思。
      

  8.   

    //注释版:FrameSize.java
    public class FrameSize extends JFrame {
        public FrameSize() {
            //设置Frame大小、位置以及标题栏
            setTitle("w2");
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension screen = tk.getScreenSize();
            int screenHeight = screen.height;
            int screenWidth = screen.width;
            setLocation((screenWidth / 2)-200, (screenHeight / 2)-200);
            setResizable(false);
            Image img = tk.getImage("icon.gif");
            setIconImage(img);
            
            //创建4个按钮
            JButton btn1=new JButton("button 1");
            JButton btn2=new JButton("button 2");
            JButton btn3=new JButton("button 3");
            JButton btn4=new JButton("button 4");        //用按钮1,2创建第一个panel
            ButtonPanel panel1=new ButtonPanel(btn1,btn2);
            //用按钮3,4创建第二个panel
            ButtonPanel panel2=new ButtonPanel(btn3,btn4);
            
            //将第二个panel加为第一个panel的监听器
            // 调用panel1的addActionListener方法,其结果是将panel2加为btn1和btn2的监听器
            panel1.addActionListener(panel2);
            //过程同上,结果是将panel1加为btn3和btn4的监听器
            panel2.addActionListener(panel1);
            //以上两句保证了点击btn1或者btn2时,panel2执行相应动作(就是改变自己的颜色)
            //同样,点击btn3或者btn4时,panel1执行相应动作(改变自己的颜色)
                    Container content=getContentPane();
            //将2个panel加入当前frame
            content.add(panel1,BorderLayout.NORTH);
            content.add(panel2,BorderLayout.CENTER);
        }
        public static void main(String[] args) { //程序入口
            FrameSize frame = new FrameSize(); //新建一个frame
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();      //计算整个窗口各个控件的大小
            frame.show();     //显示
        }
    }
      

  9.   

    //注释版:ButtonPanel.java
    public class ButtonPanel extends JPanel implements ActionListener {
        //实现ActionListener接口,监听button的click事件
        public ButtonPanel(JButton btn1,JButton btn2) {
            //带两个JButton参数,用来初始化本类中的两个对象
            button1=btn1;
            button2=btn2;
            add(button1);
            add(button2);
            posCur=0;
            //初始化panel背景和button的背景
            setBackground(bgColor[posCur]);
            button1.setBackground(bgColor[posCur+1]);
            button2.setBackground(bgColor[posCur+1]);
        }
        public void addActionListener(ActionListener al) {
            //添加两个button的监听器,当button被点击时,这个ActionListener会执行
            //actionPerformed方法
            button1.addActionListener(al);
            button2.addActionListener(al);
        }
        public void actionPerformed(ActionEvent event) {
            //监听到Button的点击事件,改变本panel背景和button背景
            setBackground(bgColor[posCur]);
            posCur=(posCur+1)%4;
            button1.setBackground(bgColor[posCur]);
            button2.setBackground(bgColor[posCur]);
            repaint(); //panel重绘
        }    static Color []bgColor={Color.YELLOW,Color.PINK,Color.RED,Color.GREEN};
        static int posCur;
        private JButton button1;
        private JButton button2;
    }
      

  10.   

    十分感谢 chanceqw(★★★★★)