0

我的工作是在单击特定按钮时将背景颜色更改为按钮上提到的颜色。但是当单击按钮时,我的 JApplet 似乎没有显示颜色的任何变化。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;

public class ColorChange extends JApplet implements MouseListener{

    Color c = null;
    JButton b1;
    JButton b2;
    JButton b3;
    JFrame f;
    JPanel p;
    public void init()
    {   
        frame();
    }

    private void frame() {
        // TODO Auto-generated method stub
        f = new JFrame();
        f.setSize(200,200);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        p = new JPanel();
        b1= new JButton("RED");
        b1.addMouseListener(this);
        b2 = new JButton("BLUE");
        b2.addMouseListener(this);
        b3 =new JButton("GREEN");
        b3.addMouseListener(this);
        p.setLayout(new FlowLayout());
        p.add(b1);
        p.add(b2);
        p.add(b3);
        f.add(p);
        f.setVisible(true);
    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub

        if(arg0.getSource().equals(b1))
            c =  Color.red;
        else if(arg0.getSource().equals(b2))
            c = Color.blue;
        else if(arg0.getSource().equals(b3))
            c =Color.green;
        else
            c = Color.yellow;

        repaint();

    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
        repaint();
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub
        repaint();
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub
        repaint();
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    public void paint()
    {
        f.setBackground(c);
    }


}
4

3 回答 3

1

为了简单地改变背景颜色,没有必要覆盖paint,在 Swing 的顶级容器中做也不是一个好主意。由于JPanel p占据了 的内容窗格的整个区域JFrame,您可以使用

p.setBackground(c);

旁注:

  • 使用 anActionListener而不是 aMouseListener来处理JButton动作
  • 在 Swing 中为辅助窗口使用 aJDialog而不是 aJFrame
于 2013-07-02T11:18:47.977 回答
0

您应该使用 setBackground。我的事,它是

f.getContentPane().setBackground(Color.YELLOW);

框架颜色对用户不可见,因此您必须调用 getContentPane 方法。

于 2013-07-02T11:12:42.093 回答
0

尝试这个:

f.getContentPane().setBackground(c);
于 2013-07-02T11:12:37.253 回答