3

我有另一个初学者的问题,希望有人可以提供帮助。

我正在尝试将数组从一个类传递到另一个类,以便使用它来生成条形图。我知道我可以将数组作为参数传递,但是我遇到了一些错误并且基本上有点迷失了。图表类的基本代码如下。假设我想从“AnotherClass”传递“anArray”,谁能告诉我应该如何传递它?

我尝试将它作为 JBChart & chartComponent 的参数传递,但我认为我需要它在paintComponent 中?由于它已经有“Graphics g”作为参数,我很困惑。无论如何,这两个中的任何一个都会出现 nullPointer 错误(尽管我知道我也可能做错了其他事情)。

这是图表类的基本代码。非常感谢任何想法:

public class JBChart extends JFrame {

    public JBChart()    {}

    public void buildChart()
    {   
        ChartComponent component = new ChartComponent();
        chartFrame.add(component);                           
        chartFrame.setVisible(true);
    }
}
public class ChartComponent extends JComponent {
    public ChartComponent() {}

    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
    }

--

-编辑-

这是其中一个堆栈跟踪的前几行(我希望这就足够了吗?):-

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ChartComponent.<init>(ChartComponent.java:43) at JBChart.<init>(JBChart.java:32) 
at JavaBallGUI.displayBarChart(JavaBallGUI.java:273) 
at JavaBallGUI.actionPerformed(JavaBallGUI.java:310) 

-- 它指向的行是:

for (int i = 0; i < teamObjects.length; i++) 
{ 
    if (teamObjects[i] != null) 
    { 
    teamName = teamObjects[i].getTeamName(); 
    System.out.println(teamName); 
    } 
} 
4

1 回答 1

3

您可能应该将其传递给构造函数

public class ChartComponent extends JComponent {
    private final int[] values; // For example

    public ChartComponent(int[] values) {
        this.values = values;
    }

    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
    }
}

请注意,这仍然允许一类在之后更改数组中的值,因为它们都获得了对同一个可变对象的引用。有多种方法可以解决这个问题,具体取决于您要执行的操作。然后你会使用:

ChartComponent component = new ChartComponent(array);

或者,您始终可以在 上创建 setter 方法ChartComponent并在适当的时间调用这些方法。您将无法更改的签名paintComponent并仍然获得您想要的行为,因此您需要在调用该方法之前提供数据。

于 2012-01-08T20:55:28.703 回答