情况是这样, 我写了一个画圆的类public class Circle extends JPanel{ @Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Color c = g.getColor();
g.setColor(Color.BLUE);
g.fillOval(30, 30, 50, 50);
g.setColor(c);
}然后我想把他添加到我AppUI类的jpanel1之中public class AppUI extends javax.swing.JFrame { /** Creates new form AppUI */
public AppUI() {
initComponents();//生成相关界面代码,其中包括jpanel1
Circle c = new Circle();
c.paintComponent(Graphics g);//这一行不停的报错,不知道什么原因,IDE显示"找不到符号,需要 ), 不是语句"
jPanel1.add(c);
}
}
不知道是什么问题,希望有高手能帮我解答一下.
protected void paintComponent(Graphics g){
super.paintComponent(g);
Color c = g.getColor();
g.setColor(Color.BLUE);
g.fillOval(30, 30, 50, 50);
g.setColor(c);
}然后我想把他添加到我AppUI类的jpanel1之中public class AppUI extends javax.swing.JFrame { /** Creates new form AppUI */
public AppUI() {
initComponents();//生成相关界面代码,其中包括jpanel1
Circle c = new Circle();
c.paintComponent(Graphics g);//这一行不停的报错,不知道什么原因,IDE显示"找不到符号,需要 ), 不是语句"
jPanel1.add(c);
}
}
不知道是什么问题,希望有高手能帮我解答一下.
这条语句是自己执行的,不需要显式调用,也不能显式调用,就像actionPerformed函数一样。
首先调用一个函数时,应该传一个具体的参数,Graphics g是在声明参数
其次paintComponent是protected类型的,不能显示的调用。但是他会在对象初始化时自动调用
c.paintComponent(Graphics g);
然后确认一下30, 30, 50, 50这个位置确实在显示范围内
jPanel我设置了为白色, 显示的确实是白色. 圆的背景色我设置的是红色, 圆本身为蓝色, 但是仍然显示不出来, 改变坐标为(80,80)和(130,130)仍然没有显示.不知道是什么问题.我在怀疑paintComponent()方法真的调用了么?
坐标设在(0,0)确保Circle显示出来了,圆就显示出来另外
Circle c = new Circle();
后面加一句
c.setOpaque(false);
对,就是没有setsize.
最后我终于搞定了! 通过我的实验, swing 的画图其实是把cricle作为一个JPanel, 然后在JPanel上面画画, 然后将这个JPanel加到其他的JPanel里面!所以事实上并不是在jpanel1上面画出了一个圆, 而是在circle上面画了一个圆, 最后讲circle加到jpanel1里面! 所以必须设置c.setsize()
另外, 在circle内部filloval方法里面设置位置只是圆相对于jpanel的
要想控制圆在jpanel1里面的位置, 必须在appUI这个类里面设置.贴上我最终的代码.
public AppUI() {
initComponents();
this.setLocationRelativeTo(null);
Circle c = new Circle();
c.setLocation(260,260);
c.setSize(40, 40);
c.setBackground(Color.white);
jPanel1.add(c); }public class Circle extends JPanel{ public static final int circleWidth = 40;
public static final int positionX = 0;
public static final int positionY = 0;
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Color c = g.getColor();
g.setColor(Color.BLUE);
g.fillOval(positionX, positionY, circleWidth, circleWidth);
g.setColor(c); }