非静态变量this不能从main方法的静态上下文中引用



我在这个语句的主方法中显示了一个错误://非静态变量this不能从静态上下文中引用

frame.getContentPane().add(new PieChart()); 

我认为这就像加载一个内容窗格并向其中添加PieChart类一样简单。我今天花了几个小时,希望我能得到这个问题的帮助。我有10周的Java经验,直到现在还没有走出我的深度。任何建议都非常感谢。

Here is my PieChart program:

package iapiechart;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
import javax.swing.JFrame;
class IAPieChart{
    double arcValue;        // passes a value for the calculation of the arc.
    Color marker;            // holds value for color (expressed as an integer 
    public IAPieChart(double value, Color color){
        this.arcValue = value;
        this.marker = color;
    }

    public class PieChart extends JComponent { 
        IAPieChart[] pieValue = {new IAPieChart(5, Color.green),
                                new IAPieChart(33, Color.orange),
                                new IAPieChart(20, Color.blue),
                                new IAPieChart(15, Color.red)
        };
        public void paint(Graphics g) {
            drawPie((Graphics2D) g, getBounds(),  pieValue);
        }
        void drawPie(Graphics2D g, Rectangle area, IAPieChart[] pieValue){
            double sum = 0.0D;
            for (int i = 0; i < pieValue.length; i++) {
                sum += pieValue[i].arcValue;
            }
            double endPoint =  0.0D;
            int arcStart = 0; 
            for (int i = 0; i < pieValue.length; i++){
                endPoint = (int) (endPoint * 360 / sum);
                int radius = (int) (pieValue[i].arcValue * 360/ sum);
                g.setColor(pieValue[i].marker);
                g.fillArc(area.x, area.y, area.width, area.height, arcStart, radius);
                radius += pieValue[i].arcValue;
            }
        }
    }
     public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new PieChart()); // This is where the error occurs. 
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        }
 }

从一个静态方法main,你试图实例化一个内部类PieChart,它不是静态的——声明它为静态

public static class PieChart extends JComponent { 

如果您要保持PieChart非静态,那么您将需要IAPieChart的实例来创建PieChart的实例,并且您在main中没有IAPieChart的实例。

由于您在PieChart类中创建了IaPieChart,因此您的代码应该是这样的:

public class PieChart extend JComponent
{
    static class IaPieChart(..)
    {
    }
}

那是你的IaPieChart类,它实际上是PieChart类的一个辅助类,所以它应该在那个类中定义,而不是其他方式。

此外,自定义绘画是通过重写paintComponent()方法来完成的,而不是paint()方法。

你不能从静态成员访问非静态的东西,正如几个小时前讨论的。-

不能从静态上下文中引用非静态方法"JPA Java

相关内容

  • 没有找到相关文章

最新更新