public class BallPanel extends javax.swing.JPanel{
private final int INIT_X=75;
private final int INIT_Y=75;
private final int DIAMETER=60;
private SmartEllipse _ball;
public BallPanel(){
super();
_ball=new SmartEllipse(java.awt.Color.green);
_ball.setLocation(INIT_X,INIT_Y);
_ball.setSize(DIAMETER,DIAMETER);
this.setBackground(java.awt.Color.white);//我想把背景改成白色,但是不行
}
public void paintComponent(java.awt.Graphics aBrush){
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
aBrush;
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
}
放到paintComponent方法里 public void paintComponent(java.awt.Graphics aBrush){
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
aBrush;
setBackground(java.awt.Color.white
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
这样写是没有错的,但是panel是要有父组建的,即要在一个frame上才能显示一个panel,楼主试一下加一个frame,然后add这个panel,设置背景颜色那样写是正确的
private final int INIT_X=75;
private final int INIT_Y=75;
private final int DIAMETER=260;//改大点 60实在太小了
//private SmartEllipse _ball;//我注释掉了
public BallPanel(){
super();
//_ball=new SmartEllipse(java.awt.Color.green);//同上 注释掉了
this.setLocation(INIT_X,INIT_Y);
this.setSize(DIAMETER,DIAMETER);
this.getContentPane().setBackground(java.awt.Color.red);//为了直白,改成红色
this.setVisible(true);//显示改组件
}
public static void main(String args[]){
new BallPanel();
}
}输出:
* @param args
*/
private BallPanel p;
public BallApp(String title){
super(title);
this.setSize(600,450);
this.setDefaultCloseOperation
(javax.swing.JFrame.EXIT_ON_CLOSE);
p=new BallPanel();
this.add(p);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BallApp app=
new BallApp("Jam's first window");
//pane1.
}
}
public class BallPanel extends javax.swing.JPanel{
private final int INIT_X=75;
private final int INIT_Y=75;
private final int DIAMETER=250;
private SmartEllipse _ball;
public BallPanel(){
super();
_ball=new SmartEllipse(java.awt.Color.green);
_ball.setLocation(INIT_X,INIT_Y);
_ball.setSize(DIAMETER,DIAMETER);
}
public void paintComponent(java.awt.Graphics aBrush){
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
aBrush;
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
}
public class SmartEllipse extends java.awt.geom.Ellipse2D.Double{
private java.awt.Color _borderColor,_fillColor;
private int _rotation;
private final int STROKE_WIDTH=2;
public SmartEllipse(java.awt.Color aColor){
super();
_borderColor=aColor;
_fillColor=aColor;
_rotation=0;
}
public void setBorderColor(java.awt.Color aColor){
_borderColor=aColor;
}
public void setFillColor(java.awt.Color aColor){
_fillColor=aColor;
}
public void setColor(java.awt.Color aColor){
_fillColor=aColor;
_borderColor=aColor;
}
public void setRotation(int aRotation){
_rotation=aRotation;
}
public void setLocation(double x,double y){
this.setFrame(x,y,this.getWidth(),this.getHeight());
}
public void setSize(int aWidth,int aHeight){
this.setFrame(this.getX(),this.getY(),aWidth,aHeight);
}
public void move(int aChangeInX,int aChangeInY){
this.setFrame((int)this.getX()+aChangeInX,
(int)this.getY()+aChangeInY,
this.getWidth(),this.getHeight());
}
public void fill(java.awt.Graphics2D aBetterBrush){
java.awt.Color saveColor=aBetterBrush.getColor();
aBetterBrush.setColor(_fillColor);
aBetterBrush.fill(this);
aBetterBrush.setColor(saveColor);
}
public void draw(java.awt.Graphics2D aBrush){
java.awt.Color savedColor=aBrush.getColor();
aBrush.setColor(_borderColor);
java.awt.Stroke savedStroke=aBrush.getStroke();
aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
aBrush.draw(this);
aBrush.setStroke(savedStroke);
aBrush.setColor(savedColor);
}
}
this.setBackground(Color.WHITE);这样写也是可以的
public class BallApp extends javax.swing.JFrame { /**
* @param args
*/
private BallComponent c;//换成c
public BallApp(String title){
super(title);
this.setSize(600,450);
this.setDefaultCloseOperation
(javax.swing.JFrame.EXIT_ON_CLOSE);
// p=new BallPanel();
// this.add(p);
c=new BallComponent();//换成c
this.add(c);
this.getContentPane().setBackground(java.awt.Color.RED);//背景色改成红
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BallApp app=
new BallApp("Jam's first window");
//pane1.
}
}/**
* 照搬一个JComponent
* @author Administrator
*
*/
class BallComponent extends javax.swing.JComponent{
private final int INIT_X=75;
private final int INIT_Y=75;
private final int DIAMETER=250;
private SmartEllipse _ball;
public BallComponent(){
super();
_ball=new SmartEllipse(java.awt.Color.green);
_ball.setLocation(INIT_X,INIT_Y);
_ball.setSize(DIAMETER,DIAMETER);
}
public void paintComponent(java.awt.Graphics aBrush){
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush=(java.awt.Graphics2D)
aBrush;
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
}class SmartEllipse extends java.awt.geom.Ellipse2D.Double{
//public class SmartEllipse extends java.awt.geom.Ellipse2D.Double{ //去掉了public
private java.awt.Color _borderColor,_fillColor;
private int _rotation;
private final int STROKE_WIDTH=2;
public SmartEllipse(java.awt.Color aColor){
super();
_borderColor=aColor;
_fillColor=aColor;
_rotation=0;
}
public void setBorderColor(java.awt.Color aColor){
_borderColor=aColor;
}
public void setFillColor(java.awt.Color aColor){
_fillColor=aColor;
}
public void setColor(java.awt.Color aColor){
_fillColor=aColor;
_borderColor=aColor;
}
public void setRotation(int aRotation){
_rotation=aRotation;
}
public void setLocation(double x,double y){
this.setFrame(x,y,this.getWidth(),this.getHeight());
}
public void setSize(int aWidth,int aHeight){
this.setFrame(this.getX(),this.getY(),aWidth,aHeight);
}
public void move(int aChangeInX,int aChangeInY){
this.setFrame((int)this.getX()+aChangeInX,
(int)this.getY()+aChangeInY,
this.getWidth(),this.getHeight());
}
public void fill(java.awt.Graphics2D aBetterBrush){
java.awt.Color saveColor=aBetterBrush.getColor();
aBetterBrush.setColor(_fillColor);
aBetterBrush.fill(this);
aBetterBrush.setColor(saveColor);
}
public void draw(java.awt.Graphics2D aBrush){
java.awt.Color savedColor=aBrush.getColor();
aBrush.setColor(_borderColor);
java.awt.Stroke savedStroke=aBrush.getStroke();
aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
aBrush.draw(this);
aBrush.setStroke(savedStroke);
aBrush.setColor(savedColor);
}
}我也是刚开始学;
1.5.0_17 Eclipse 调试结果:
JPanel p = new JPanel();
f.add(p);
p.setBackground(Color.RED);
this.setVisible(true);
public class BallApp extends javax.swing.JFrame {
/** * @param args */
private BallPanel p; public BallApp(String title) {
super(title);
this.setSize(600, 450); this.setBackground(java.awt.Color.red); this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
p = new BallPanel();
this.add(p);
this.setVisible(true);
} public static void main(String[] args) { // TODO Auto-generated method stub
BallApp app = new BallApp("Jam's first window"); // pane1.
}
}public class BallPanel extends javax.swing.JPanel {
private final int INIT_X = 75;
private final int INIT_Y = 75;
private final int DIAMETER = 250;
private SmartEllipse _ball; public BallPanel() {
super();
_ball = new SmartEllipse(java.awt.Color.green);
_ball.setLocation(INIT_X, INIT_Y);
_ball.setSize(DIAMETER, DIAMETER);
} public void paintComponent(java.awt.Graphics aBrush) {
super.paintComponents(aBrush);
java.awt.Graphics2D betterBrush = (java.awt.Graphics2D) aBrush;
_ball.fill(betterBrush);
_ball.draw((java.awt.Graphics2D) aBrush);
}
}public class SmartEllipse extends java.awt.geom.Ellipse2D.Double {
private java.awt.Color _borderColor, _fillColor;
private int _rotation;
private final int STROKE_WIDTH = 2; public SmartEllipse(java.awt.Color aColor) {
super();
_borderColor = aColor;
_fillColor = aColor;
_rotation = 0;
} public void setBorderColor(java.awt.Color aColor) {
_borderColor = aColor;
} public void setFillColor(java.awt.Color aColor) {
_fillColor = aColor;
} public void setColor(java.awt.Color aColor) {
_fillColor = aColor;
_borderColor = aColor;
} public void setRotation(int aRotation) {
_rotation = aRotation;
} public void setLocation(double x, double y) {
this.setFrame(x, y, this.getWidth(), this.getHeight());
} public void setSize(int aWidth, int aHeight) {
this.setFrame(this.getX(), this.getY(), aWidth, aHeight);
} public void move(int aChangeInX, int aChangeInY) {
this.setFrame((int) this.getX() + aChangeInX, (int) this.getY()
+ aChangeInY, this.getWidth(), this.getHeight());
} public void fill(java.awt.Graphics2D aBetterBrush) {
java.awt.Color saveColor = aBetterBrush.getColor();
aBetterBrush.setColor(_fillColor);
aBetterBrush.fill(this);
aBetterBrush.setColor(saveColor);
} public void draw(java.awt.Graphics2D aBrush) {
java.awt.Color savedColor = aBrush.getColor();
aBrush.setColor(_borderColor);
java.awt.Stroke savedStroke = aBrush.getStroke();
aBrush.setStroke(new java.awt.BasicStroke(STROKE_WIDTH));
aBrush.draw(this);
aBrush.setStroke(savedStroke);
aBrush.setColor(savedColor);
}
}