背景颜色不变

时间:2013-07-02 11:09:22

标签: java swing jframe awt japplet

我的工作是每当特定按钮被点击到按钮上提到的颜色时更改背景颜色。但是当点击按钮时,我的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);
    }


}

3 个答案:

答案 0 :(得分:1)

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

p.setBackground(c);

附注:

  • 使用ActionListener而不是MouseListener来处理JButton行动
  • 在Swing
  • 中使用JDialog而不是JFrame用于辅助窗口

答案 1 :(得分:0)

试试这个:

f.getContentPane().setBackground(c);

答案 2 :(得分:0)

你应该使用setBackground。 我的事,是

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

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