当我传递类的变量时,paintComponent方法不会绘制任何东西

时间:2016-08-24 06:09:49

标签: java swing jpanel

我的java代码:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;

import javax.swing.JPanel;

public class ConcentricCircles2D extends JPanel {
double myX = 0;
double myY = 0;
int myWidth = getWidth();
int myHeight = getHeight();

public void paintComponent(Graphics g)
{

    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setPaint(Color.BLUE);                  
    g2.setStroke(new BasicStroke(5.0f)); 
    g2.draw(new Ellipse2D.Double(myX, myY, myWidth, myHeight));

}

当我在paintComponent方法中使用局部变量时,它可以正常工作。我该如何解决这个问题? (我在单独的课上创建了面板。)

1 个答案:

答案 0 :(得分:1)

仅在实例化myWidth对象时才设置

myHeightConcentricCircles2D值。此时它的重量和高度为零。

所以这句话

Ellipse2D.Double(myX, myY, myWidth, myHeight)

等于

Ellipse2D.Double(0, 0, 0, 0)

它根本不会绘制任何椭圆。

替换句子

 g2.draw(new Ellipse2D.Double(myX, myY, myWidth, myHeight));

使用原始

 g2.draw(new Ellipse2D.Double(0, 0, getWidth(), getHeight()));

将绘制以父JFrame为中心的椭圆,如果您调整其父级,其尺寸将会改变。