[英]Trying to draw a Pie chart with AWT in Java
我正在嘗試在 Java(使用 AWT)中繪制餅圖,其中餅圖的“部分”是通過 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[]
。JFrame
時,您正在使用Frame
paintComponent
而不是paint
JPanel
而不是Panel
另一方面,您擴展了面板而不是框架。 這正是你應該做的,也是許多人犯的錯誤。 總而言之,這是一次不錯的繪畫嘗試。
檢查完后,在paintComponent
方法中的for loop
之前添加以下內容
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
不要忘記將g
s 更改為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();
}
}
我添加了 colors 以便您可以看到餅圖的不同部分。
有關繪畫的更多信息,請查看Java 教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.