我有另一个初学者的问题,希望有人可以提供帮助。
我正在尝试将数组从一个类传递到另一个类,以便使用它来生成条形图。我知道我可以传递一个数组作为参数,但我收到一些错误,基本上有点丢失。 图表类的基本代码如下。假设我想从“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);
}
}
答案 0 :(得分: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);
或者,您始终可以在ChartComponent
上创建setter方法,并在适当的时候调用它们。您不会能够更改paintComponent
的签名并仍然获得您想要的行为,因此您需要在调用该方法之前提供数据。