自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java Swing編程:拖放功能

開(kāi)發(fā) 后端
拖放功能其實(shí)就像我們使用windows 的時(shí)候按住CTRL然后拖動(dòng)某個(gè)圖標(biāo),會(huì)復(fù)制該對(duì)象。這給用戶提供了很棒的用戶體驗(yàn),沒(méi)辦法程序員總是給自己找麻煩,讓用戶覺(jué)得方便,其實(shí)這個(gè)功能AWT也提供了Swing話只是利用了這個(gè),因?yàn)檫@和界面沒(méi)什么關(guān)系。

拖放功能其實(shí)就像我們使用windows 的時(shí)候按住CTRL然后拖動(dòng)某個(gè)圖標(biāo),會(huì)復(fù)制該對(duì)象。這給用戶提供了很棒的用戶體驗(yàn),沒(méi)辦法程序員總是給自己找麻煩,讓用戶覺(jué)得方便,其實(shí)這個(gè)功能AWT也提供了Swing話只是利用了這個(gè),因?yàn)檫@和界面沒(méi)什么關(guān)系。

DropTarget(拖放目的地)eg(將圖片拖入后顯示):

  1. public class TestDropTarget  
  2. {  
  3.     final int DESKTOP_WIDTH = 480;  
  4.     final int DESKTOP_HEIGHT = 360;  
  5.     final int FRAME_DISTANCE = 30;  
  6.     JFrame jf = new JFrame("測(cè)試拖放目標(biāo)——把圖片文件拖入該窗口");  
  7.     //定義一個(gè)虛擬桌面  
  8.     private JDesktopPane desktop = new JDesktopPane();  
  9.     //保存下一個(gè)內(nèi)部窗口的座標(biāo)點(diǎn)  
  10.     private int nextFrameX;  
  11.     private int nextFrameY;  
  12.     //定義內(nèi)部窗口為虛擬桌面的1/2大小  
  13.     private int width = DESKTOP_WIDTH / 2;  
  14.     private int height = DESKTOP_HEIGHT / 2;  
  15.  
  16.     public void init()  
  17.     {  
  18.         desktop.setPreferredSize(new Dimension(DESKTOP_WIDTH, DESKTOP_HEIGHT));  
  19.         //將當(dāng)前窗口創(chuàng)建成拖放源  
  20.         new DropTarget(jf, DnDConstants.ACTION_COPY ,  new ImageDropTargetListener());  
  21.         jf.add(desktop);  
  22.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  23.         jf.pack();  
  24.         jf.setVisible(true);  
  25.     }  
  26.  
  27.     class ImageDropTargetListener extends DropTargetAdapter  
  28.     {  
  29.         public void drop(DropTargetDropEvent event)  
  30.         {  
  31.             //接受復(fù)制操作  
  32.             event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);  
  33.             //獲取拖放的內(nèi)容  
  34.             Transferable transferable = event.getTransferable();  
  35.             DataFlavor[] flavors = transferable.getTransferDataFlavors();  
  36.             //遍歷拖放內(nèi)容里的所有數(shù)據(jù)格式  
  37.             for (int i = 0; i < flavors.length; i++)  
  38.             {    
  39.                 DataFlavor d = flavors[i];  
  40.                 try 
  41.                 {  
  42.                     //如果拖放內(nèi)容的數(shù)據(jù)格式是文件列表  
  43.                     if (d.equals(DataFlavor.javaFileListFlavor))  
  44.                     {  
  45.                         //取出拖放操作里的文件列表  
  46.                         java.util.List fileList   
  47.                             = (java.util.List) transferable.getTransferData(d);  
  48.                         for (Object f : fileList)  
  49.                         {  
  50.                             //顯示每個(gè)文件  
  51.                             showImage((File)f , event);  
  52.                         }  
  53.                     }  
  54.                 }  
  55.                 catch (Exception e)  
  56.                 {    
  57.                     e.printStackTrace();  
  58.                 }  
  59.                 //強(qiáng)制拖放操作結(jié)束,停止阻塞拖放源  
  60.                 event.dropComplete(true);  
  61.             }  
  62.         }  
  63.         //顯示每個(gè)文件的工具方法  
  64.         private void showImage(File f , DropTargetDropEvent event)throws java.io.IOException  
  65.         {  
  66.             Image image = ImageIO.read(f);  
  67.             if (image == null)  
  68.             {  
  69.                 //強(qiáng)制拖放操作結(jié)束,停止阻塞拖放源  
  70.                 event.dropComplete(true);  
  71.                 JOptionPane.showInternalMessageDialog(desktop , "系統(tǒng)不支持這種類型的文件");  
  72.                 //方法返回,不會(huì)繼續(xù)操作  
  73.                 return;  
  74.             }  
  75.             ImageIcon icon = new ImageIcon(image);  
  76.             //創(chuàng)建內(nèi)部窗口顯示該圖片  
  77.             JInternalFrame iframe = new JInternalFrame(f.getName()  
  78.                 ,true , true , true , true);  
  79.             JLabel imageLabel = new JLabel(icon);  
  80.             iframe.add(new JScrollPane(imageLabel));  
  81.             desktop.add(iframe);  
  82.             //設(shè)置內(nèi)部窗口的原始位置(內(nèi)部窗口默認(rèn)大小是0X0,放在0,0位置)  
  83.             iframe.reshape(nextFrameX, nextFrameY, width, height);  
  84.             //使該窗口可見(jiàn),并嘗試選中它  
  85.             iframe.show();  
  86.             //計(jì)算下一個(gè)內(nèi)部窗口的位置  
  87.             nextFrameX += FRAME_DISTANCE;  
  88.             nextFrameY += FRAME_DISTANCE;  
  89.             if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;  
  90.             if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;  
  91.         }  
  92.     }  
  93.     public static void main(String[] args)  
  94.     {  
  95.         new TestDropTarget().init();  
  96.     }  

DropSource(拖放源)eg(將文字拖入支持拖放的文本編輯器Editplus,Eclipse,idea等。。。記事本,UltraEdit竟然不支持)拖放源主要是要將拖放對(duì)象組成Transferable對(duì)象

  1. public class TestDragSource  
  2. {  
  3.     JFrame jf = new JFrame("Swing的拖放支持");  
  4.     JLabel srcLabel = new JLabel("AWT的拖放支持./n" 
  5.         +"將該文本域的內(nèi)容拖入其他程序./n");  
  6.     public void init()  
  7.     {  
  8.         DragSource dragSource = DragSource.getDefaultDragSource();  
  9.         //將srcLabel轉(zhuǎn)換成拖放源,它能接受復(fù)制、移動(dòng)兩種操作  
  10.         dragSource.createDefaultDragGestureRecognizer(srcLabel,  
  11.             DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener()  
  12.             {  
  13.                 public void dragGestureRecognized(DragGestureEvent event)  
  14.                 {    
  15.                     //將JLabel里的文本信息包裝成Transferable對(duì)象  
  16.                     String txt = srcLabel.getText();  
  17.                     Transferable transferable = new StringSelection(txt);  
  18.                     //繼續(xù)拖放操作,拖放過(guò)程中使用手狀光標(biāo)  
  19.                     event.startDrag(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR),   
  20.                         transferable);  
  21.                 }  
  22.             });  
  23.         jf.add(new JScrollPane(srcLabel));  
  24.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  25.         jf.pack();  
  26.         jf.setVisible(true);  
  27.     }  
  28.     public static void main(String[] args)   
  29.     {  
  30.         new TestDragSource().init();  
  31.     }  

JDK1.4開(kāi)始對(duì)Swing的拖放功能做了簡(jiǎn)化,不同組件分別提供了拖放源和拖放目標(biāo),這里就講用的最多的文本域,他既能拖入文本,也能將文本拖出,非常方便。

但默認(rèn)這個(gè)功能沒(méi)有啟用,要手動(dòng)調(diào)用setDragEnabled方法,使其生效。eg

  1. public class SwingDndSupport  
  2. {  
  3.     JFrame jf = new JFrame("Swing的拖放支持");  
  4.     JTextArea srcTxt = new JTextArea(8 , 30);  
  5.     JTextField jtf = new JTextField(34);  
  6.     public void init()  
  7.     {  
  8.         srcTxt.append("AWT的拖放支持./n");  
  9.         srcTxt.append("將該文本域的內(nèi)容拖入其他程序./n");  
  10.         //啟動(dòng)文本域和單行文本框的拖放支持  
  11.         srcTxt.setDragEnabled(true);  
  12.         jtf.setDragEnabled(true);  
  13.         jf.add(new JScrollPane(srcTxt));  
  14.         jf.add(jtf , BorderLayout.SOUTH);  
  15.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  16.         jf.pack();  
  17.         jf.setVisible(true);  
  18.     }  
  19.     public static void main(String[] args)   
  20.     {  
  21.         new SwingDndSupport().init();  
  22.     }  

方便吧,今天就講到這里了。

原文鏈接:http://blog.csdn.net/terryzero/article/details/3779252

【編輯推薦】

  1. Java Swing編程:特殊容器
  2. Java Swing編程:基本組件
  3. Java Swing用戶界面設(shè)計(jì):序
  4. 用Swing制作精美的圖層疊加圖
  5. 簡(jiǎn)述Java圖形用戶界面設(shè)計(jì)(Swing)
責(zé)任編輯:林師授 來(lái)源: terryzero的博客
相關(guān)推薦

2012-01-17 14:09:54

JavaSwing

2012-01-17 13:41:34

JavaSwing

2012-01-17 14:05:29

JavaSwing

2012-01-17 13:16:34

JavaSwing

2012-01-17 13:53:16

JavaSwing

2009-12-30 10:25:03

Silverlight

2011-06-22 10:20:11

QT 鼠標(biāo) 拖放

2012-01-17 13:58:17

JavaSwing

2012-01-16 16:16:49

JavaSwing

2012-01-04 09:42:40

HTML 5

2009-07-15 10:52:13

JTree組件

2009-07-17 17:00:20

JavaFX功能Swing

2012-03-07 09:08:00

HTML 5

2012-01-17 14:01:33

JavaSwing

2009-06-17 15:13:57

Java網(wǎng)絡(luò)功能編程方法

2010-01-29 09:00:48

HTML5 File 文件拖放上傳

2022-10-19 09:48:00

谷歌Chrome瀏覽器

2022-02-17 11:13:08

從Windows 1任務(wù)欄

2009-07-10 14:20:01

AcceleratorJava Swing

2009-07-10 11:45:44

Java Swing
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)