package com.chcbz;import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Graphics;
public class Chart {
public static void main(String[] args){
JFrame jf = new JFrame("Test");
Wall w = new Wall();
Container contentPane = jf.getContentPane();
contentPane.add("Center",w);
jf.setSize(100,100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}class Wall extends JPanel{
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D)g;
setBackground(Color.blue);
g2d.setColor(Color.red);
g2d.setStroke(new BasicStroke(4f,0,0));
g2d.drawRect(10, 10, 50, 50);
g2d.drawLine(10, 40, 60, 40);
g2d.drawLine(35, 10, 35, 40);
}
}
我是想将JPanel背景颜色改成黑色,而不是在JFrame设,为什么显示不了背景颜色啊?请各位高手赐教.

解决方案 »

  1.   

    改下你那个Wall类class Wall extends JPanel{
    public void paintBorder(Graphics g){
    Graphics2D g2d = (Graphics2D)g;
    setBackground(Color.blue);
    g2d.setColor(Color.red);
    g2d.setStroke(new BasicStroke(4f,0,0));
    g2d.drawRect(10, 10, 50, 50);
    g2d.drawLine(10, 40, 60, 40);
    g2d.drawLine(35, 10, 35, 40);
    }
    }
      

  2.   

    还有个办法,就是在你现有的代码里,加一句话: super.paint(g);class Wall extends JPanel{
    public void paint(Graphics g){
                      super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
    setBackground(Color.blue);
    g2d.setColor(Color.red);
    g2d.setStroke(new BasicStroke(4f,0,0));
    g2d.drawRect(10, 10, 50, 50);
    g2d.drawLine(10, 40, 60, 40);
    g2d.drawLine(35, 10, 35, 40);
    }
    }
      

  3.   

    JPanel绘图时,不要用paint这个方法了,推荐用paintComponent(Graphics g)这个方法,使用如下:@Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    //绘制代码
    ....
    // 如果设置背景不成功的话,可以试一下,先把整个panel用背景色自己绘制一下
    }下面的代码能很好的工作:import java.awt.*;
    import javax.swing.*;public class Test extends JPanel {        public Test() {
                    this.setBackground(Color.BLACK);
            }        @Override
            protected void paintComponent(Graphics g) {
                    super.paintComponent(g);                // draw code
                    Graphics2D g2d = (Graphics2D) g;
                    setBackground(Color.blue);
                    g2d.setColor(Color.red);
                    g2d.setStroke(new BasicStroke(4f, 0, 0));
                    g2d.drawRect(10, 10, 50, 50);
                    g2d.drawLine(10, 40, 60, 40);
                    g2d.drawLine(35, 10, 35, 40);
            }        private static void createUIAndShow() {
                    JFrame frame = new JFrame();                Test test = new Test();
                    frame.getContentPane().add(test);                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setSize(300, 399);
                    frame.setVisible(true);
            }        public static void main(String[] args) {
                    javax.swing.SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                    Test.createUIAndShow();
                            }
                    });
            }}
      

  4.   

    可不可以说一下paint、paintComponent、paintBorder都有什么不同?