现有一个需求,就是原有程序把图行内容在屏幕上输出了。但现在,希望程序运行时,不要再窗口看到,也就是不能输出到屏幕,而是输出到某个图像文件。
注1:屏幕copy的方式不行,因为不想在屏幕上看到运行的程序。
注2:最好有屏幕输出的重定向方法,即,能够把输出到屏幕的流,重新定向到文件。(此方法最好,但不知道从何下手)
注3:希望多个建议,另外给分。

解决方案 »

  1.   

    相同问题的贴子,欢迎来拿分。
    http://topic.csdn.net/u/20100514/14/d75de2aa-b4de-4bf4-9939-fd198f343b2a.html
      

  2.   

    awt还是swing,
    参考http://www.roseindia.net/java/example/java/swing/Print.shtml,它是直接打印机,但关键一样。
      

  3.   

    看错题目了,拿到Image之后,使用ImageIO.write()方法。
      

  4.   

    抱歉,我说的不清楚。我说的画面图形,不是单纯的图像。而是一组AWT的控件。有Button,有入力框等。不是用Image等类似类生成的。
      

  5.   

    又追加 100 分。
    http://topic.csdn.net/u/20100514/14/225f2468-7355-41d6-ba02-6895c90a944e.html
      

  6.   

    一共 500 分。奖励大家的热情参与。相同问题的帖子如下。
    http://topic.csdn.net/u/20100514/14/a7ba671b-1ac6-454c-b60e-5e967d79f26c.html
    http://topic.csdn.net/u/20100514/14/d75de2aa-b4de-4bf4-9939-fd198f343b2a.html
    http://topic.csdn.net/u/20100514/14/225f2468-7355-41d6-ba02-6895c90a944e.html
    http://topic.csdn.net/u/20100514/15/4e42ad52-7959-4d1a-bd94-710e27b6587b.html
    http://topic.csdn.net/u/20100514/15/4b870d56-87e6-466b-9f9c-78106ae03a10.html
      

  7.   

    public class Test extends JFrame {  public Test() {
        super("Test");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(500, 500);
        getContentPane().setLayout(new FlowLayout());
        add(new JLabel("test"));
        add(new JTextArea("abcdefg\n1234567", 10, 10));
        JButton button = new JButton("Save To Image");
        button.addActionListener(new ActionListener() {      /**
           * @param e
           * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
           */
          @Override
          public void actionPerformed(ActionEvent e) {
            try {
              // 这里就简单处理了,什么选择文件啊,对错消息都省略了
              Test.this.saveTo(new File("D:/test/test.png"));
            } catch (Exception ex) {        }
          }    });
        add(button);
        setVisible(true);
      }  public void saveTo(File file) throws Exception {
        BufferedImage img = new BufferedImage(getWidth(), getHeight(),
            BufferedImage.TYPE_INT_ARGB);
        Graphics graphics = img.getGraphics();
        this.paintComponents(graphics);
        ImageIO.write(img, "PNG", file);
      }  public static void main(String[] args) {
        new Test();
      }}看看这个满足你要求吗
      

  8.   

    这里下载
    http://download.csdn.net/source/2354374
      

  9.   

    感谢大家的热情参与,根据 shine333 高手的指点。问题基本解决了。
    马上根据各位的热情参与度散分。shine333 的代码的精髓我正在整理,整理后再公布给大家。
    便于大家学习。To: ABBuggy 抱歉,您提供的代码我没来得及参考。
    估计也一定是高手。
      

  10.   

    用下列方法就可以:
    BufferedImage image = new BufferedImage(width. height. BufferedImage.TYPE_INT_ARGB);
    Graphics g = image.getGraphics();
    ImageIO.write(image, "PNG", file);
      

  11.   

    已经结贴。不知道给各位的分数是否满意。哈哈如果不满意,可以站内联络我,我尽量平衡大家。这里最委屈的要算,ABBuggy 了。
    真的抱歉,没来的及拜读您的代码。各贴给你合计的分数可能不高,您别介意。
    我在公司下载您代码不方便,您不妨贴出来,如果确实也解决该问题,我另开贴子给您分。
      

  12.   

    先总结该贴如下:
    1,问题:
       元某C/S程序,C端处理比较复杂,用继承AWT的自制控件,绘制线图,柱图,等混合图形。先想将这部分处理移植成Web程序。由于生成的图形,在IE端只是浏览,没有鼠标操作,所以考虑在Web服务器上,留用原来代码生成Image文件后,发给IE端。这样移植代价最小。2,shine333 提供的最佳方案 (解释不准确的地方,请高手指正)
       AWT中有一个容器类 Container 。绘制在JFrame上的控件,都被包含在该容器中。该类提供paint和paintComponents方法,支持将容器中所有控件描绘到 Graphics 对象中。
       这样就解决了,在Web服务器上,隐藏方式的绘制图形(不同于用robot方式的拷贝屏幕)。而且不受运行程序个数的限制(这一点也不同于用robot方式的拷贝屏幕)。3,补充学习(让高手见笑了)
       AWT包,提供了GUI的class。这些class可以分成3大类。
       第一类。
           单纯的GUI控件。按钮,滚动条,表格等等。
           他们都在 java.awt.Component 下
       第二类。
           控件的事件类。
           他们都在 java.awt.Evnet 下
       第三类。
           就是存放控件的场所,负责控件在视觉上的摆放,层的管理等。比如这次用的 Container和 LayoutManager。
       了解了这三大类的作用,下次在遇到类似问题,就好找入手的地方了。再次感谢各位的热情参与。谢谢。