我的工作是每当特定按钮被点击到按钮上提到的颜色时更改背景颜色。但是当点击按钮时,我的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);
}
}
答案 0 :(得分:1)
对于简单地改变背景颜色,没有必要覆盖paint
,在Swing中的顶级容器中也不是一个好主意。由于JPanel
p
占据JFrame
内容窗格的完整区域,您可以使用
p.setBackground(c);
附注:
ActionListener
而不是MouseListener
来处理JButton
行动JDialog
而不是JFrame
用于辅助窗口
答案 1 :(得分:0)
试试这个:
f.getContentPane().setBackground(c);
答案 2 :(得分:0)
你应该使用setBackground。 我的事,是
f.getContentPane().setBackground(Color.YELLOW);
框架颜色对用户不可见,因此您必须调用getContentPane方法。