1

我对 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);
        }
    });
}
}
4

1 回答 1

3

将拖动的行放在桌子上的其他任何地方时,我(有时)会得到下面显示的错误,直到 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

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

顺便说一句,自动装箱可以简化初始化代码:

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}
};

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

图片

作为一种解决方法,有一个解决方案可以完全禁用灰色矩形

于 2012-10-14T18:33:16.653 回答