JFreeChart を含む Eclipse RCP アプリケーションを開発しています。その機能の 1 つは、他のアプリケーションに貼り付けるためにグラフをクリップボードにコピーすることですが、Linux では機能しません。
Linux で機能しないスニペットを見つけることができるSWT サンプルがあります。
一方、JFreeChart はこれを AWT で次のように実装しました。
Clipboard systemClipboard
= Toolkit.getDefaultToolkit().getSystemClipboard();
Insets insets = getInsets();
int w = getWidth() - insets.left - insets.right;
int h = getHeight() - insets.top - insets.bottom;
ChartTransferable selection = new ChartTransferable(this.chart, w, h,
getMinimumDrawWidth(), getMinimumDrawHeight(),
getMaximumDrawWidth(), getMaximumDrawHeight(), true);
systemClipboard.setContents(selection, null);
ただし、どちらの例も Linux 64 ビットでは失敗します。それを実装する方法はありますか??
前もって感謝します!
編集:
JFreeChart グラフィックをクリップボードではなくファイルにコピーするコード
final org.eclipse.swt.dnd.Clipboard clipboard = new org.eclipse.swt.dnd.Clipboard(menu.getDisplay());
Insets insets = source.getInsets();
int w = source.getWidth() - insets.left - insets.right;
int h = source.getHeight() - insets.top - insets.bottom;
ChartTransferable selection = new ChartTransferable(source
.getChart(), w, h, source.getMinimumDrawWidth(), source.getMinimumDrawHeight(), source
.getMaximumDrawWidth(), source.getMaximumDrawHeight(), true);
Image image = new Image(menu.getDisplay(),ImageUtils.convertToSWT(selection.getBufferedImage()));
if (image != null) {
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] { image.getImageData() };
imageLoader.save("/tmp/graph.jpg", SWT.IMAGE_JPEG); // fails
ImageTransfer imageTransfer = ImageTransfer.getInstance();
clipboard.setContents(new Object[]{image.getImageData()},
new Transfer[]{imageTransfer}, DND.CLIPBOARD | DND.SELECTION_CLIPBOARD);
}