我正在编写一个图形用户界面来绘制xy轴上的数据。它是用Java Swing编写的,所以我有一个包含整个GUI的JFrame
。 GUI的一个组件是JPanel
,它构成了绘制数据的区域。我使用Graphics2D
来绘制。
我正在尝试对此程序进行命令行扩展。这个想法是用户可以指定他们想要在配置文件中绘制的数据。这允许有趣的参数扫描,节省大量时间。
当我尝试获取要绘制的Graphics
对象时,会出现问题。我创建了执行绘图的JPanel
,但是当我调用Graphics
时,paintComponent()
对象为空。
此外,当您运行程序(再次从命令行运行)时,它会从您尝试执行的任何操作中窃取焦点(如果此程序在后台运行)。反正有没有解决这个问题?您是否必须创建JPanel
来绘图?
感谢您提供的任何帮助!
P.S。当我说我从命令行运行程序时,我的意思是说你没有使用GUI。所有的绘图等都是在没有界面的情况下完成的。另外,我知道您无法实例化Graphics
对象。
答案 0 :(得分:5)
使用java.awt.image.BufferedImage
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//.. draw stuff ..
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("myimage.png"));
writer.write(image);
答案 1 :(得分:3)
如果您不使用GUI,则需要使用headless mode 这将为您提供适当的图形环境。 您必须使用
等选项执行java -Djava.awt.headless=true
或 在主类中设置属性,例如:
System.setProperty( “java.awt.headless”, “真”);
请查看链接以获取更多程序化示例。