Swing/Web image drag
Web Image drag into JPanel
Soul-Learner
2016. 9. 7. 20:17
웹브라우저 화면의 이미지를 마우스로 드래그하여 JPanel에 그리는 예
웹브라우저에서 이미지를 드래그하여 자바 화면에 그리기 결과 화면
package org.kdea.swing; import javax.swing.*; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.*; import java.io.*; import java.util.List; import javax.imageio.ImageIO; public class WebImageDragDemo extends JFrame { static ImgDragPanel idp; WebImageDragDemo(){ setTitle("웹페이지에서 이미지를 드래그하여 이 화면에 올려보세요"); setBounds(200,100,600,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); idp = new ImgDragPanel(); add(idp, BorderLayout.CENTER); setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new WebImageDragDemo(); } }); } //내부 클래스 class ImgDragPanel extends JPanel { BufferedImage bimg; ImgDragPanel() { this.setTransferHandler(new TransferHandler() { @Override public boolean canImport(JComponent component, DataFlavor[] flavors) { return true; } @Override public boolean importData(JComponent component, Transferable transferable) { //label.setText(""); try { for (DataFlavor flavor : transferable.getTransferDataFlavors()) { System.out.println("flavor:"+flavor); if (DataFlavor.imageFlavor.equals(flavor)) { Object o = transferable.getTransferData(DataFlavor.imageFlavor); if (o instanceof Image) { //label.setIcon(new ImageIcon((Image) o)); Image img = (Image)o; BufferedImage bimg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); // Draw the image on to the buffered image Graphics2D bGr = bimg.createGraphics(); bGr.drawImage(img, 0, 0, null); bGr.dispose(); idp.bimg = bimg; idp.repaint(); return true; } } if (DataFlavor.javaFileListFlavor.equals(flavor)) { Object o = transferable.getTransferData(DataFlavor.javaFileListFlavor); if (o instanceof List) { List list = (List) o; for (Object f : list) { if (f instanceof File) { File file = (File) f; System.out.println("file:"+file); if (!file.getName().endsWith(".bmp")) { //label.setIcon(new ImageIcon(file.getAbsolutePath())); idp.bimg = ImageIO.read(file); idp.repaint(); return true; } } } } } } } catch (Exception ex) { ex.printStackTrace(); } return false; } @Override public int getSourceActions(JComponent component) { return COPY; } }); // end of TransferHandler() }// end of constructor @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.drawImage(bimg, 0, 0, null); } } }