在没有JPanel的情况下使用Java绘图

时间:2010-07-01 21:53:34

标签: java graphics jpanel

我正在编写一个图形用户界面来绘制xy轴上的数据。它是用Java Swing编写的,所以我有一个包含整个GUI的JFrame。 GUI的一个组件是JPanel,它构成了绘制数据的区域。我使用Graphics2D来绘制。

我正在尝试对此程序进行命令行扩展。这个想法是用户可以指定他们想要在配置文件中绘制的数据。这允许有趣的参数扫描,节省大量时间。

当我尝试获取要绘制的Graphics对象时,会出现问题。我创建了执行绘图的JPanel,但是当我调用Graphics时,paintComponent()对象为空。

此外,当您运行程序(再次从命令行运行)时,它会从您尝试执行的任何操作中窃取焦点(如果此程序在后台运行)。反正有没有解决这个问题?您是否必须创建JPanel来绘图?

感谢您提供的任何帮助!

P.S。当我说我从命令行运行程序时,我的意思是说你没有使用GUI。所有的绘图等都是​​在没有界面的情况下完成的。另外,我知道您无法实例化Graphics对象。

2 个答案:

答案 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”,   “真”);

请查看链接以获取更多程序化示例。