我要做的功能是将jfreechart生成的图复制到windows的剪切板上但是chartpanel.createImage(chartpanel.getWidth(),chartpanel.getHeight());返回的是空
我希望这个chartpanel能生成一个Image对象
请教熟悉jfreechart的人指导下

解决方案 »

  1.   

    先透過 ChartFactory 產生一個JFreeChat,然後用JFreeChart的 createBufferedImage 產生圖,
    或是 draw(java.awt.Graphics2D ...)那些 method 把圖畫在別的元件的 Graphics2D 上。
      

  2.   

    ChartPanel chartPanel=chartSrivice.makePieChart(this.getPieChartData(
                            titles, tableData));
    JPopupMenu popupMenu=chartPanel.getPopupMenu();
    JMenuItem menuItem=new JMenuItem("Copy");
    final Image image = chartPanel.getChart().createBufferedImage(chartPanel.getWidth(), chartPanel.getHeight());
     menuItem.addActionListener(new ActionListener()
            {            public void actionPerformed(ActionEvent event)
                {
                    
                    Clipboard board=Toolkit.getDefaultToolkit().getSystemClipboard();
                     
                    Transferable trans = new Transferable()
                    {                    public DataFlavor[] getTransferDataFlavors()
                        {
                            return new DataFlavor[] { DataFlavor.imageFlavor };
                        }                    public boolean isDataFlavorSupported(DataFlavor flavor)
                        {
                            return DataFlavor.imageFlavor.equals(flavor);
                        }                    public Object getTransferData(DataFlavor flavor)
                                throws UnsupportedFlavorException, IOException
                        {
                            if (isDataFlavorSupported(flavor)){
                                return image;}
                            throw new UnsupportedFlavorException(flavor);
                        }                };
                    board.setContents(trans, null);            }
                
            });
            popupMenu.add(menuItem);红色字体那报错了,java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0。
    这是什么问题啊,我希望从chartpanel对象获得image对象,应该怎么做
      

  3.   

    是不是我思路错了,有没有人知道jpanel怎么转Image对象,或者说复制功能不用这么做
      

  4.   

    先參考這個頁面做出ImageSelection 
    ImageSelection 最後產生JFreeChart之後用下面這段程式複製到剪貼簿。 Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
     ImageSelection imgSel = new ImageSelection(jfreeChart.createBufferedImage(400, 300));
     Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null);
      

  5.   

    问题解决了,原因是chartPanel只有在画到面板上以后才能取出长和宽。在触发事件的时候再获取chartPanel的大小生成imag对象就行了。修改如下方法就可以了
     public Object getTransferData(DataFlavor flavor)
                                throws UnsupportedFlavorException, IOException
                        {
                            if (isDataFlavorSupported(flavor)){
                                Image image =chartPanel.getChart().createBufferedImage(chartPanel.getWidth(), chartPanel
                                        .getHeight());
                                return image;}
                            throw new UnsupportedFlavorException(flavor);
                        }