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

Posted

技术标签:

【中文标题】在 Mac OS X 上使用 JTable 进行拖放【英文标题】:Drag and Drop with JTable on Mac OS X 【发布时间】:2012-10-04 14:22:48 【问题描述】:

我在 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", "Chasing toddlers", new Integer(2), new Boolean(false),
                "Mark", "Andrews", "Speed reading", new Integer(20), new Boolean(true),
                "Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)
            ;

            String[] columnNames = "First Name", "Last Name", "Sport", "# of Years", "Vegetarian";

            final JTable table = new JTable(data, columnNames);
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            table.setDragEnabled(true);
            frame.add(table);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        
    );


【问题讨论】:

为sscce+1。 【参考方案1】:

将拖动的行拖放到表格的其他任何位置时,我(有时)会得到下面显示的错误,直到 Mac OS X 10.5.8。目标选择矩形保留在屏幕上,无法进行进一步的拖动操作。我不知道为什么,但我想一个单元格没有被识别为适合一行的目的地。

2012-10-14 14:14:23.912 java[44061:10b] ***-[NSWindowViewAWT draggingEnded:]: 无法识别的选择器发送到实例 0x1001e7140 2012-10-14 14:14:23.913 java[44061:10b] ***-[NSWindowViewAWT draggingEnded:]: 无法识别的选择器发送到实例 0x1001e7140

将拖动的行放到另一个应用程序上可以按预期工作。

顺便说一句,auto-boxing 可以简化初始化代码:

Object[][] data = 
    "Mary", "Campione", "Snowboarding", 5, false,
    "Alison", "Huml", "Rowing", 3, true,
    "Kathy", "Walrath", "Chasing toddlers", 2, false,
    "Mark", "Andrews", "Speed reading", 20, true,
    "Angela", "Lih", "Teaching high school", 4, false
;

附录:此图显示了正在进行的拖动;触发异常后,拖动框架时灰色矩形保持不动。

作为一种解决方法,disable the grey rectangle altogether 有一个解决方案。

【讨论】:

以上是关于在 Mac OS X 上使用 JTable 进行拖放的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]

如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?

如何隐藏 Mac/OSX 拖放 JTable 选择框

为啥OSX 不能在“Macintosh HD”上安装,Mac OS X 讨论区

在 Mac OS X Yosemite 10.10 上使用 Mamp Pro 进行 Mcrypt

如何在 OS X 上拖放到 (python) 脚本上?