91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java Swing編程中的拖放功能怎么用

發布時間:2021-10-29 10:16:06 來源:億速云 閱讀:415 作者:柒染 欄目:編程語言

這篇文章給大家介紹Java Swing編程中的拖放功能怎么用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

拖放功能其實就像我們使用windows 的時候按住CTRL然后拖動某個圖標,會復制該對象。這給用戶提供了很棒的用戶體驗,沒辦法程序員總是給自己找麻煩,讓用戶覺得方便,其實這個功能AWT也提供了Swing話只是利用了這個,因為這和界面沒什么關系。

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

public class TestDropTarget  {      final int DESKTOP_WIDTH = 480;      final int DESKTOP_HEIGHT = 360;      final int FRAME_DISTANCE = 30;      JFrame jf = new JFrame("測試拖放目標&mdash;&mdash;把圖片文件拖入該窗口");      //定義一個虛擬桌面      private JDesktopPane desktop = new JDesktopPane();      //保存下一個內部窗口的座標點      private int nextFrameX;      private int nextFrameY;      //定義內部窗口為虛擬桌面的1/2大小      private int width = DESKTOP_WIDTH / 2;      private int height = DESKTOP_HEIGHT / 2;       public void init()      {          desktop.setPreferredSize(new Dimension(DESKTOP_WIDTH, DESKTOP_HEIGHT));          //將當前窗口創建成拖放源          new DropTarget(jf, DnDConstants.ACTION_COPY ,  new ImageDropTargetListener());          jf.add(desktop);          jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          jf.pack();          jf.setVisible(true);      }       class ImageDropTargetListener extends DropTargetAdapter      {          public void drop(DropTargetDropEvent event)          {              //接受復制操作              event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);              //獲取拖放的內容              Transferable transferable = event.getTransferable();              DataFlavor[] flavors = transferable.getTransferDataFlavors();              //遍歷拖放內容里的所有數據格式              for (int i = 0; i < flavors.length; i++)              {                    DataFlavor d = flavors[i];                  try                 {                      //如果拖放內容的數據格式是文件列表                      if (d.equals(DataFlavor.javaFileListFlavor))                      {                          //取出拖放操作里的文件列表                          java.util.List fileList                               = (java.util.List) transferable.getTransferData(d);                          for (Object f : fileList)                          {                              //顯示每個文件                              showImage((File)f , event);                          }                      }                  }                  catch (Exception e)                  {                        e.printStackTrace();                  }                  //強制拖放操作結束,停止阻塞拖放源                  event.dropComplete(true);              }          }          //顯示每個文件的工具方法          private void showImage(File f , DropTargetDropEvent event)throws java.io.IOException          {              Image image = ImageIO.read(f);              if (image == null)              {                  //強制拖放操作結束,停止阻塞拖放源                  event.dropComplete(true);                  JOptionPane.showInternalMessageDialog(desktop , "系統不支持這種類型的文件");                  //方法返回,不會繼續操作                  return;              }              ImageIcon icon = new ImageIcon(image);              //創建內部窗口顯示該圖片              JInternalFrame iframe = new JInternalFrame(f.getName()                  ,true , true , true , true);              JLabel imageLabel = new JLabel(icon);              iframe.add(new JScrollPane(imageLabel));              desktop.add(iframe);              //設置內部窗口的原始位置(內部窗口默認大小是0X0,放在0,0位置)              iframe.reshape(nextFrameX, nextFrameY, width, height);              //使該窗口可見,并嘗試選中它              iframe.show();              //計算下一個內部窗口的位置              nextFrameX += FRAME_DISTANCE;              nextFrameY += FRAME_DISTANCE;              if (nextFrameX + width > desktop.getWidth()) nextFrameX = 0;              if (nextFrameY + height > desktop.getHeight()) nextFrameY = 0;          }      }      public static void main(String[] args)      {          new TestDropTarget().init();      }  }

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

public class TestDragSource  {      JFrame jf = new JFrame("Swing的拖放支持");      JLabel srcLabel = new JLabel("AWT的拖放支持./n"         +"將該文本域的內容拖入其他程序./n");      public void init()      {          DragSource dragSource = DragSource.getDefaultDragSource();          //將srcLabel轉換成拖放源,它能接受復制、移動兩種操作          dragSource.createDefaultDragGestureRecognizer(srcLabel,              DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener()              {                  public void dragGestureRecognized(DragGestureEvent event)                  {                        //將JLabel里的文本信息包裝成Transferable對象                      String txt = srcLabel.getText();                      Transferable transferable = new StringSelection(txt);                      //繼續拖放操作,拖放過程中使用手狀光標                      event.startDrag(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR),                           transferable);                  }              });          jf.add(new JScrollPane(srcLabel));          jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          jf.pack();          jf.setVisible(true);      }      public static void main(String[] args)       {          new TestDragSource().init();      }  }

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

但默認這個功能沒有啟用,要手動調用setDragEnabled方法,使其生效。eg

public class SwingDndSupport  {      JFrame jf = new JFrame("Swing的拖放支持");      JTextArea srcTxt = new JTextArea(8 , 30);      JTextField jtf = new JTextField(34);      public void init()      {          srcTxt.append("AWT的拖放支持./n");          srcTxt.append("將該文本域的內容拖入其他程序./n");          //啟動文本域和單行文本框的拖放支持          srcTxt.setDragEnabled(true);          jtf.setDragEnabled(true);          jf.add(new JScrollPane(srcTxt));          jf.add(jtf , BorderLayout.SOUTH);          jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          jf.pack();          jf.setVisible(true);      }      public static void main(String[] args)       {          new SwingDndSupport().init();      }  }

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

關于Java Swing編程中的拖放功能怎么用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六枝特区| 神农架林区| 宜兰县| 牟定县| 武乡县| 江山市| 徐汇区| 京山县| 芮城县| 隆德县| 大新县| 太湖县| 天祝| 托克逊县| 边坝县| 乐清市| 林芝县| 娄烦县| 濮阳县| 澄迈县| 安国市| 鄂尔多斯市| 贺州市| 韩城市| 崇左市| 双牌县| 龙岩市| 顺昌县| 图们市| 西华县| 涟水县| 西乌| 措美县| 德庆县| 平阳县| 喀喇| 泰安市| 平山县| 崇左市| 历史| 文成县|