【发布时间】:2010-10-17 10:50:01
【问题描述】:
好的,这个问题不在我的范围内。我正在尝试在 swing 中实现一个 GUI 小部件,它允许将文件拖放到 JTable 上,并允许拖动 JTable 的行以进行重新排序。想想 VLC 的播放列表或 iTunes 中的播放列表。
我从操作系统(Explorer、Finder 等)中删除文件工作得很好,但是一旦文件进入,我就无法重新安排表格的行。问题是当我向表格添加自定义 TransferHandler 时,从表格中拖动 会立即被杀死。下面是一些示例代码:
import javax.swing.*;
public class TableTest
{
public static void main (String [] argv)
{
// setup table data
String [] columns = new String [] {"Foo", "Bar", "Baz", "Quux"};
String [][] data = new String [][] {{"A", "B", "C", "D"},
{"1", "2", "3", "4"},
{"i", "ii", "iii", "iv"}};
// create table
JTable table = new JTable(data, columns);
// set up drag and drop
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.setFillsViewportHeight(true);
TransferHandler dnd = new TransferHandler() {
// here be code to handle drops, and one would
// presume drag exporting, too
};
table.setTransferHandler(dnd);
JScrollPane scroll = new JScrollPane(table);
// create and show window
JFrame window = new JFrame();
window.getContentPane().add(scroll);
window.pack();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}
按原样运行此代码,您将看到无法在表格上启动拖动。如果您在表格上注释掉对 setTransferHandler() 的调用,则可以进行拖动(即,当我开始拖动表格行时) ,我得到 X'd out 圆形光标说我不能放在那里)。但是一旦为表设置了 TransferHandler,我就不能拖动任何行。问题必须出在 TransferHandler 中,但我已经彻底解决并调试了它,并确定一旦桌子上有 TransferHandler 就永远不会开始拖动。我做错了什么?
【问题讨论】:
-
多么奇怪。我遇到同样的问题。我试图记住我是否做过任何工作,我有一个支持从和到拖的表格。
标签: java swing drag-and-drop jtable