import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class MarkInput {
public static void main(String args[]) {
MainFrame mf = new MainFrame();
mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mf.setVisible(true);
}
}class MainFrame extends JFrame {
int k[] = null; //用来存放成绩分类的数组,k[0]-k[3]分别放置从不及格到优秀的成绩的个数
int width;
int height;
String str = "    "; //用来控制空白处长度的字符串
public MainFrame() {
setTitle("分数统计");
setBounds(200, 200, 400, 450);


k=new int[4];
for(int i=0;i<k.length;i++) {
k[i] = 0;
} JPanel northPanel = new JPanel(); //北边的JPnel,用来存放2个文本行和按钮

JLabel jl1 = new JLabel("姓名:",SwingConstants.LEFT); final JTextField jtf1 = new JTextField();
jtf1.setColumns(10);
JLabel jl2 = new JLabel("分数:",SwingConstants.LEFT);
final JTextField jtf2 = new JTextField();
jtf2.setColumns(10);
JButton insertButton = new JButton("输入");
northPanel.add(jl1);
northPanel.add(jtf1);
northPanel.add(jl2);
northPanel.add(jtf2);
northPanel.add(insertButton); add(northPanel,BorderLayout.NORTH);

final JTextArea jta = new JTextArea();
jta.setColumns(8);
jta.append("姓名"+str+"分数"+str+"\n"); JScrollPane scrollPane = new JScrollPane(jta); //滚动条框,放入用来显示的文本域,并始终显示滚动条
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

add(scrollPane,BorderLayout.WEST);


final DrawPanel centerPanel = new DrawPanel();//中间的panel,用来绘制饼图和说明性文字

add(centerPanel,BorderLayout.CENTER);
 
insertButton.addActionListener(new ActionListener() 
{
public void actionPerformed(ActionEvent event){

if(Integer.parseInt(jtf2.getText())>=0 && Integer.parseInt(jtf2.getText())<=100) { 
jta.append(jtf1.getText() + str + jtf2.getText() + str + "\n");
if(Integer.parseInt(jtf2.getText())<60) {
k[0]++;
}else if(Integer.parseInt(jtf2.getText())>=60 && Integer.parseInt(jtf2.getText())<=74) {
k[1]++;
}else if(Integer.parseInt(jtf2.getText())>=75 && Integer.parseInt(jtf2.getText())<=89) {
k[2]++;
}else {
k[3]++;
}
}else {
System.out.println("error");
 }
repaint();
}
}
);


}

class DrawPanel extends JPanel {
int a,b,m,n; //分别存储k[0]-k[3]的临时变量
public void paint(Graphics g) {
g.setFont(new Font("宋体",Font.PLAIN,18));
int sum=0;
width = getWidth();
height = getHeight();

if(k[0]==0 && k[1]==0 && k[2]==0 && k[3]==0) {
g.setColor(Color.gray);
g.fillRect(0, 0, width, height); //设置颜色为灰,然后填充与中央JPanle等大的长方形用来做背景
                                    g.setColor(Color.yellow);
g.drawString("优秀(100-90)",25,50);
g.fillArc(50,100,200,200,0,90);
g.setColor(Color.green);
g.drawString("良好(89-75)",150,50);
g.fillArc(50,100,200,200,90,90);
g.setColor(Color.blue);
g.drawString("中等(74-60)",25,80);
g.fillArc(50,100,200,200,180,90);
g.setColor(Color.red);
g.drawString("不及格(60以下)",150,80);
g.fillArc(50,100,200,200,270,90);
}else{
a = k[3];
b = k[2];
m = k[1];
n = k[0];
sum =a+b+m+n;
g.setColor(Color.gray);
g.fillRect(0, 0, width, height);
g.setColor(Color.yellow);
g.drawString("优秀(100-90)",25,50);
g.fillArc(50,100,200,200,0,360*a/sum);
g.setColor(Color.green);
g.drawString("良好(89-75)",150,50);
g.fillArc(50,100,200,200,360*a/sum,360*b/sum);
g.setColor(Color.blue);
g.drawString("中等(74-60)",25,80);
g.fillArc(50,100,200,200,360*(a+b)/sum,360*m/sum);
g.setColor(Color.red);
g.drawString("不及格(60以下)",150,80);
g.fillArc(50,100,200,200,360*(a+b+m)/sum,360*n/sum);

}
}
}

}
老师给的实验,要求根据不同输入变化饼图在各个地方实了加setBackground(Color.gray);但是中央的JPanel显示不出背景色
我只好自己想了个填充长方形的方法去当背景,请问如果想在不同的JPanel中设置不同的背景色该怎么弄,GUI这方面接触的确实比较少,不熟悉
代码比较长,希望有朋友能耐心的看下PS:感觉做网页版的说不定还能简单点=.=