问题简单点说就是:怎么使用setBackground()设置窗格(不是框架)的背景色。import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;public class MyColorTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
MyFrame frame=new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// frame.getContentPane().setBackground(Color.red);
}
});
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
Toolkit toolkit=Toolkit.getDefaultToolkit();
Dimension screenSize=toolkit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
setTitle("MyColorTest");
setSize(width/2,height/2);
setLocationByPlatform(true);
MyPanel panel=new MyPanel();
panel.setBackground(Color.green);//*1*
add(panel);
}}
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{
this.setBackground(Color.green);//*2*
Graphics2D g2=(Graphics2D)g;
setSize(200,200);
setLocation(200,100);
Color yellow=Color.YELLOW;
g2.setPaint(yellow);
Rectangle2D rec=new Rectangle2D.Double(100,100,50,50);
g2.fill(rec);
}
}
import javax.swing.*;
import java.awt.geom.*;public class MyColorTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
MyFrame frame=new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// frame.getContentPane().setBackground(Color.red);
}
});
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
Toolkit toolkit=Toolkit.getDefaultToolkit();
Dimension screenSize=toolkit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
setTitle("MyColorTest");
setSize(width/2,height/2);
setLocationByPlatform(true);
MyPanel panel=new MyPanel();
panel.setBackground(Color.green);//*1*
add(panel);
}}
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{
this.setBackground(Color.green);//*2*
Graphics2D g2=(Graphics2D)g;
setSize(200,200);
setLocation(200,100);
Color yellow=Color.YELLOW;
g2.setPaint(yellow);
Rectangle2D rec=new Rectangle2D.Double(100,100,50,50);
g2.fill(rec);
}
}
如果第一处设置的话就把JPanel中重写的方法去掉就显示背景色了,要不你那是写两遍当然不会有第一处的效果。
第二处设置的话一样得把下面绘背景的取消,要不也是等于画背景画了两遍。。
或者楼主期望什么样的结果,发图看一下