问题简单点说就是:怎么使用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);
}
}

解决方案 »

  1.   

    楼主先给我解释一下什么叫“窗格”吧。这个我真的不明白。
    如果第一处设置的话就把JPanel中重写的方法去掉就显示背景色了,要不你那是写两遍当然不会有第一处的效果。
    第二处设置的话一样得把下面绘背景的取消,要不也是等于画背景画了两遍。。
    或者楼主期望什么样的结果,发图看一下
      

  2.   

    我看书上说panel这个词,翻译过来不是窗格?那叫什么?我期待的效果就是,框架是正常的背景色灰色;上边的panel组件(这么叫?)占地200*200,距框架边框左200,顶100,背景色绿色;这个组件里边有个rec正方形(这个不是才叫组件吗?),填充的黄色。我还没有做出来,所以没有图,只能描述出来,希望你能看懂,我刚看书学到这里,有的概念不太清楚,有错的地方希望您指出来。
      

  3.   

    按你说的,我把MyPanel中重写的paintComponent()方法整个注释掉了,确实出现绿色了,这个我不明白,书上说我应该重写这个方法才能绘制自己的组件,没有既能绘制自己的组件又能填充背景色的方法吗?
      

  4.   

    1的地方直接设置JFrame的背景色可行么?学GUI很早之前的事了,不知道还记不记得。
      

  5.   

    回5楼:1的地方不是在设置JFrame的背景色,当时我是在想设置面板MyPanel的背景色,代码中我第一次注释掉的地方是设置JFrame的背景色,那个是可行的,因为要试验的东西挺多的,那个和现在的问题没什么太大关系,就给注释掉了。
      

  6.   

    好吧,问题自己解决了,重写了paintComponent()方法后再设置背景色就不行了,要在重写的方法中先调用super.paintComponent();然后就可以了,原理不是太懂,可能paintComponent()方法的具体实现我不清楚,我只知道书上说要绘制自己的组件就要重写这个方法,可能设置背景色不属于绘制组件的一部分吧。