尝试在 Java 中使用 AWT 绘制饼图
Trying to draw a Pie chart with AWT in Java
我正在尝试在 Java 中绘制饼图(使用 AWT),其中饼图的 "pieces" 是通过 args 参数(用户输入)设置的。
这是我的代码:
public class Pie extends Panel
{
int value[];
int start = 0;
public Pie(String[] args)
{
int value[] = new int[args.length];
for(int i = 0; i<args.length; i++) //Error at this line
{
value[i] = Integer.parseInt(args[i]);
}
}
public void paint(Graphics g)
{
for(int i = 0; i<value.length; i++)
{
g.fillArc(150, 150, 200, 200, start, value[i]);
start = start + value[i];
}
}
public static void main(String args[])
{
Frame f = new Frame("Piechart");
Pie p = new Pie(args);
f.add(p);
f.setVisible(true);
f.setSize(400, 400);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
}}
当我尝试 运行 带有 4 个 args 参数的程序(即 java Pie 90 90 90 90)时,我收到错误消息:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Pie.paint(Pie.java:24)
我可以更改什么以使程序 运行 没有错误?
尝试以下操作:
- 您在分配数组时重新声明
value[]
。
- 你在使用
Frame
而你应该使用 JFrame
- 你应该覆盖
paintComponent
而不是 paint
- 你应该使用
JPanel
而不是 Panel
另一方面,您扩展了面板而不是框架。这正是你应该做的,也是许多人犯的错误。总而言之,这是一次不错的绘画尝试。
检查完后,在 paintComponent
方法 for loop
之前添加以下内容
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
不要忘记将 g
更改为 g2d
这往往会通过进行一些像素平均来在视觉上平滑粗糙的边缘。根据您所画的内容,有时效果可能会很戏剧化。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Pie extends JPanel
{
int value[];
int start = 0;
Color[] colors = {Color.red, Color.green, Color.blue, Color.orange};
public Pie(String[] args)
{
value = new int[args.length];
for(int i = 0; i<args.length; i++) //Error at this line
{
value[i] = Integer.parseInt(args[i]);
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (value == null) {
return;
}
for(int i = 0; i<value.length; i++) {
g.setColor(colors[i%colors.length]);
g.fillArc(150, 150, 200, 200, start, value[i]);
start = start + value[i];
}
}
public static void main(String args[])
{
JFrame f = new JFrame("Piechart");
Pie p = new Pie(new String[]{"90","90","90", "90"});
f.add(p);
p.setPreferredSize(new Dimension(400, 400));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.repaint();
}
}
我添加了颜色,以便您可以看到饼图的不同部分。
有关绘画的更多信息,请查看 Java Tutorials
我正在尝试在 Java 中绘制饼图(使用 AWT),其中饼图的 "pieces" 是通过 args 参数(用户输入)设置的。
这是我的代码:
public class Pie extends Panel
{
int value[];
int start = 0;
public Pie(String[] args)
{
int value[] = new int[args.length];
for(int i = 0; i<args.length; i++) //Error at this line
{
value[i] = Integer.parseInt(args[i]);
}
}
public void paint(Graphics g)
{
for(int i = 0; i<value.length; i++)
{
g.fillArc(150, 150, 200, 200, start, value[i]);
start = start + value[i];
}
}
public static void main(String args[])
{
Frame f = new Frame("Piechart");
Pie p = new Pie(args);
f.add(p);
f.setVisible(true);
f.setSize(400, 400);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
}}
当我尝试 运行 带有 4 个 args 参数的程序(即 java Pie 90 90 90 90)时,我收到错误消息:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Pie.paint(Pie.java:24)
我可以更改什么以使程序 运行 没有错误?
尝试以下操作:
- 您在分配数组时重新声明
value[]
。 - 你在使用
Frame
而你应该使用JFrame
- 你应该覆盖
paintComponent
而不是paint
- 你应该使用
JPanel
而不是Panel
另一方面,您扩展了面板而不是框架。这正是你应该做的,也是许多人犯的错误。总而言之,这是一次不错的绘画尝试。
检查完后,在 paintComponent
方法 for loop
之前添加以下内容
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
不要忘记将 g
更改为 g2d
这往往会通过进行一些像素平均来在视觉上平滑粗糙的边缘。根据您所画的内容,有时效果可能会很戏剧化。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Pie extends JPanel
{
int value[];
int start = 0;
Color[] colors = {Color.red, Color.green, Color.blue, Color.orange};
public Pie(String[] args)
{
value = new int[args.length];
for(int i = 0; i<args.length; i++) //Error at this line
{
value[i] = Integer.parseInt(args[i]);
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (value == null) {
return;
}
for(int i = 0; i<value.length; i++) {
g.setColor(colors[i%colors.length]);
g.fillArc(150, 150, 200, 200, start, value[i]);
start = start + value[i];
}
}
public static void main(String args[])
{
JFrame f = new JFrame("Piechart");
Pie p = new Pie(new String[]{"90","90","90", "90"});
f.add(p);
p.setPreferredSize(new Dimension(400, 400));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.repaint();
}
}
我添加了颜色,以便您可以看到饼图的不同部分。
有关绘画的更多信息,请查看 Java Tutorials