Tag: 拖放

将字符串添加到JList的确切位置,而不是底部

我有几个JList都可以成为DnD COPY动作的源和目的地。 它们工作正常,但有一点 – 元素添加在列表的底部,而不是像我想的那样添加到放置目标行。 由于Oracle BasicDnD示例包含此function(事实上,它是我能通过Google找到的唯一应用程序),我一直在查看其来源 ,看看我是否能够适应它。 我试图设置TransferHandler对象,这是我想我错过了,但没有出现新的行为。 那么,我可能会遗漏/做错什么? EDIT1:下面显示了我用于这些列表的类。 private class InteractiveJList extends JList implements DragGestureListener, DragSourceListener, DropTargetListener { private final DropTarget dropTarget; private final DragSource dragSource; private final boolean removeElementsOnFail; private int[] selectedOnes; @SuppressWarnings(“unchecked”) private InteractiveJList(final ListModel model, final boolean _removElementsOnFail) { super(model); this.dragSource = new DragSource(); this.dragSource .createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, this); this.dropTarget […]

拖放以在JPanel上移动JTextArea

我希望能够单击JTextArea并将其拖动到我的JPanel周围。 我不确定这样做的方法。 我想要做的是在拖动时更改JTextArea的x,y坐标,我不是在另一个上面或下面拖动JTextArea 。 就在屏幕上,类似于在Microsoft PowerPoint等程序中移动文本框 我能想到的唯一方法是使用MouseListener但我想知道除了检测JTextArea上的hover/按下/拖动之外是否有更简单的方法来实现它。 关于如何开始的任何想法? import java.awt.Color; import java.awt.Cursor; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JTextArea; public class UMLEditor { public static void main(String[] args) { JFrame frame = new UMLWindow(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(30, 30, 1000, 700); frame.getContentPane().setBackground(Color.white); […]

如何在Java中检测Image对象上的鼠标单击事件?

用Java实现“ Kings’Corners ”(美化多人游戏纸牌)。 我试图允许玩家将牌(图像)从他们的手拖到桌子上的其他地方。 问题是玩家的手被“扇动”,因此卡片的图像会旋转并重叠。 这是一只手的例子: 我考虑过将每张卡片都设为JPanel ,但问题是我必须将卡片在其矩形 JPanel内旋转,因为它们本身无法旋转。 理想情况下,我想避免使用mouse-x,y公式来确定选择哪张卡片。 使用事件驱动的方法,我如何确定从手中选择哪张牌?

Java:如何将控件拖放到新位置而不是其数据?

在Java中,当拖动项目是源控件本身时执行拖放的最佳方法是什么? 我知道控件只不过是数据,但差异确实会产生UI影响。 我正在创建一个单人纸牌游戏,其中我有来自JLabel的类卡牌卡片对象。 我想将该卡拖放到尚未命名的目标控件上,将其拖到另一个位置。 在拖动期间,我希望卡可以用鼠标在视觉上移动,当我想要它移动到这个目标对象或返回到它以前的位置时。 我已经完成了各种DnD测试,但没有发现任何可以在Java DD的正确规则下工作的东西。 例如,如果我使用真DnD拖动Card对象,我只能创建卡的幻影图像而不是实心图像。 此外,光标更改,我宁愿它没有(我想我可以修复它),并且源控件仍然可见(尽管在拖动过程中应该很容易使其透明) 另一方面,我可以通过监听MouseMotionListener.mouseDragged()事件并手动将卡移动到新位置来漂亮地拖动卡。 这很好用,但它没有遵循正确的DnD,因为这不会通知其他控件的拖动。 我想我可以创建自己的系统来通知其他控件,但这不会使用Java真正的DnD。 此外,如果我将真正的Java dnd内容与在mouseDragged期间逐字移动卡片的方法混合,那么我认为真正的DnD内容永远不会起作用,因为鼠标在技术上永远不会直接超过任何其他控件而不是被拖动的卡片。 这个方向看起来像粗暴的黑客。 我希望这是有道理的。 我一直在跟踪样品时出现问题,因为它们看起来非常不同,而且我花费了大量时间研究的样子看起来是在DnD在1.4版本进行重大改革之前的几年。

从ListView拖放到TreeView

我只想将项目从ListView拖放到TreeView的特定位置。 我知道如何处理DragEvent 。 但是如何才能获得treeView的删除位置? 使用“position”我的意思是“在哪个treeview-item上删除(从这个treeview-item获取引用)”。 package main; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.Event; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.DragEvent; import javafx.scene.input.MouseDragEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.stage.Stage; import javafx.util.Callback; public class Program extends Application { String buffer = “”; […]

在Java Swing中启用Transfersupport的stringFlavor

我正在实现一个function,将JLabel的Textattribute拖放到JTable的单元格中。 所以我为表创建了一个自定义TransferHandler。 但每一个电话 support.isDataFlavorSupported(DataFlavor.stringFlavor) 返回false 如何确保我的TransferHandler能够导入字符串? 这是来源 public class TableHandler extends TransferHandler { private static final long serialVersionUID = 1L; @Override public boolean canImport(TransferSupport support) { if (!support.isDrop()) { return false; } //only Strings if(!support.isDataFlavorSupported(DataFlavor.stringFlavor)){ return false; } return true; } @Override public boolean importData(TransferSupport support) { if (!canImport(support)) { return false; } Transferable tansferable […]

将文件从OS拖放到JTable java中

有人能告诉我我做错了什么吗? 我能够使用常规面板进行拖放操作,但现在尝试使用表格,我无法对其进行排序。 我对Points和DropTargets感到困惑。 不要介意“添加”按钮。 我觉得我需要先处理DnD。 public class Table extends JFrame implements ActionListener { private JTable table; private JScrollPane scroll; private JButton add; private JFileChooser choose; private JMenuBar menubar; private JMenu menu; private JMenuItem file; private DefaultTableModel tm = new DefaultTableModel(new String[] { “File”, “File Type”, “Size”, “Status” }, 2); public Table() { // String column […]

在Mac OS X上使用JTable进行拖放

我在Mac上有DnD和JTable的问题。 如果您启动以下程序并在表格中单击(快速),有时选择某些内容,有时会在应用程序崩溃一段时间后执行DnD,或者至少DnD将无法再进行。 我在2台Mac上测试过它。 Java版本:1.6.0_35 Mac OS X:10.6.8 有谁能证实这一点? 任何解决方法? package tablednd; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.SwingUtilities; public class TableDnD { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Object[][] data = { {“Mary”, “Campione”, “Snowboarding”, new Integer(5), new Boolean(false)}, {“Alison”, “Huml”, “Rowing”, new Integer(3), new Boolean(true)}, {“Kathy”, “Walrath”, […]

使用拖放重新排序JList

我遇到了一个关于使用拖放重新排序JList中的元素的问题。 以下代码是对代码的修改,您可以将元素从一个JList拖动到另一个JList(仅以一种方式工作)。 我试图让它只用于一个JList,但是元素甚至不能被拖出列表。 所以我想这不可能这样做。 我有什么不对的想法? 我的想法是让它为带有缩略图的Jlist工作,但因为我甚至无法让它只使用字符串…我一直在研究几个D’n’D教程,但我仍然不能让它工作。 任何帮助表示赞赏。 import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.datatransfer.*; import java.io.IOException; public class DragAndDrop extends JFrame { DefaultListModel transport = new DefaultListModel(); JList transportList = new JList(transport); public DragAndDrop() { setLayout(new FlowLayout()); transport.addElement(“Bike”); transport.addElement(“Car”); transport.addElement(“Truck”); transport.addElement(“Boat”); JScrollPane transportScroll = new JScrollPane(transportList); transportScroll.setBorder(new TitledBorder(“Transportation”)); add(transportScroll); transportList.setDragEnabled(true); transportList.setTransferHandler(new TransferHandler() { int […]

拖放JDK1.6和JDK1.7之间的差异

有没有人知道JDK1.6和JDK1.7之间的拖放行为的差异? 将URL从浏览器拖放到需要支持JDK1.5,JDK1.6和JDK1.7的应用程序时,我遇到了不同(如下图所示)。 我现在想知道是否存在其他差异以及是否在某处记录了这些差异。 我遇到的不同行为是通过单击并拖动URL到Java应用程序来拖放来自浏览器(而不是来自地址栏但来自页面)的URL。 在JDK1.6上,Transferable不支持DataFlavor.javaFileListFlavor ,而且它支持JDK1.7(尽管在请求传输数据时会得到一个空列表)。 以下代码说明了该问题。 它打开一个JFrame ,您可以在其上拖放像http://www.google.com这样的URL,并打印出它是否使用文件列表风格或URI列表风格 import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.TransferHandler; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.List; public class DragAndDropTester { private static DataFlavor URI_LIST_FLAVOR = null; static { try { URI_LIST_FLAVOR = new DataFlavor( […]