Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > картинка из буфера в JEditorPane


Автор: zuran 27.4.2009, 14:40
Добрый день,

Можно ли сделать так, чтобы принажатии кнопки в JEditorPane из буфера вставлялось изображение, которое было туда скопированно, на пример, из  MS Paint.

Спасибо

Автор: zuran 27.4.2009, 15:57
Или что-то похожее в JTextPane и как это можно сохранить

Автор: CrasyMen 29.4.2009, 22:04
Код

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import javax.swing.*;

public class ClipboardTest implements ActionListener, Transferable {

    final Toolkit toolkit = Toolkit.getDefaultToolkit();
    final Clipboard clipboard = toolkit.getSystemClipboard();
    Image image = null;

    final JFrame frame = new JFrame();
    final JLabel label = new JLabel();
    final JButton button1 = new JButton("Copy");
    final JButton button2 = new JButton("Paste");
    final JPanel pastePanel = new JPanel();

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("No image loaded. To load an image:");
            System.out.println("     java ClipboardTest <image file>");
        }
        ClipboardTest test = new ClipboardTest(args.length > 0 ? args[0] : null);
    }

    public ClipboardTest(String imageName) {
        if (imageName != null) {
            image = toolkit.createImage(imageName);
            label.setIcon(new ImageIcon(image));
        }

        button1.addActionListener(this);
        button2.addActionListener(this);

        frame.getContentPane().setLayout(new FlowLayout());
        frame.getContentPane().add(label);
        frame.getContentPane().add(button1);
        frame.getContentPane().add(button2);
        frame.getContentPane().add(pastePanel);
        frame.pack();
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        try {
            if (e.getSource() == button1) {
                clipboard.setContents(this, null);
            } else {
                final Transferable transferable = clipboard.getContents(null);
                if (transferable.isDataFlavorSupported(DataFlavor.imageFlavor)) {
                    final Image img =
(Image)transferable.getTransferData(DataFlavor.imageFlavor);
                    pastePanel.add(new JLabel(new ImageIcon(img)));
                } else {
                    System.err.println("No image data in the system clipboard.");
                }
                frame.pack();
                frame.invalidate();
                frame.validate();
                frame.repaint();
            }

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    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 {
        if (!isDataFlavorSupported(flavor)) {
            throw new UnsupportedFlavorException(flavor);
        }

        return image;
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)