jfreechart的chartpanel生成Image对象的问题 我要做的功能是将jfreechart生成的图复制到windows的剪切板上但是chartpanel.createImage(chartpanel.getWidth(),chartpanel.getHeight());返回的是空我希望这个chartpanel能生成一个Image对象请教熟悉jfreechart的人指导下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先透過 ChartFactory 產生一個JFreeChat,然後用JFreeChart的 createBufferedImage 產生圖,或是 draw(java.awt.Graphics2D ...)那些 method 把圖畫在別的元件的 Graphics2D 上。 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对象,应该怎么做 是不是我思路错了,有没有人知道jpanel怎么转Image对象,或者说复制功能不用这么做 先參考這個頁面做出ImageSelection ImageSelection 最後產生JFreeChart之後用下面這段程式複製到剪貼簿。 Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); ImageSelection imgSel = new ImageSelection(jfreeChart.createBufferedImage(400, 300)); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null); 问题解决了,原因是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); } 什么是钩子方法 java 程序退出时执行代码 错在哪里呀(简易聊天程序)??? 使用Derby失败,网友帮忙看看! 连连看里的连线如何实现? 关于创建对像以自身作为参数调用构造方法的理解 BufferedInputStream是什么呀? 在JBuilder5.0平台上为什么连不上数据库--谢谢帮忙 请问我能不能把一个对类的引用强制转换为一个字节数组的引用 关于synchronized用法的疑问 谁能用Java知识给我解释一下这一句呢? 我用C编写一个程序 用JAVA作界面..怎么实现.需要什么技术?
或是 draw(java.awt.Graphics2D ...)那些 method 把圖畫在別的元件的 Graphics2D 上。
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对象,应该怎么做
ImageSelection 最後產生JFreeChart之後用下面這段程式複製到剪貼簿。 Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
ImageSelection imgSel = new ImageSelection(jfreeChart.createBufferedImage(400, 300));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel, null);
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);
}