好的,这个问题超出了我的联盟.我正在尝试在swing中实现一个GUI小部件,允许将文件放到JTable上,并允许拖动JTable的行进行重新排序.想想VLC的播放列表或iTunes中的播放列表.
我从操作系统(资源管理器,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 …Run Code Online (Sandbox Code Playgroud) 有一个HTML textarea.当本地文件被拖放到textarea上时,我能够捕获该事件.但是如何获取被删除文件的名称?(最后要修改并插入textarea.)
在这种情况下,以下表达式返回None:
event.dataTransfer.files
event.dataTransfer.getData('text/plain')
Run Code Online (Sandbox Code Playgroud)
我为目前的目标平台Firefox 3做了一个简短的例子.
<script>
function init() {
document.getElementById('x').addEventListener('drop', onDrop, true)
}
function onDrop(event) {
var data = event.dataTransfer.getData('text/plain')
event.preventDefault()
alert('files: ' + event.dataTransfer.files + ' && data: ' + data + '.')
}
</script>
<body onload='init()'>
<textarea cols=70 rows=20 id='x'></textarea>
Run Code Online (Sandbox Code Playgroud) 我有一个带有DataTemplate的ItemsControl,它绑定到整数的ObservableCollection.
<ItemsControl Name="DimsContainer" ItemTemplate="{StaticResource DimensionsTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
并在Windows资源中:
<Window.Resources>
<DataTemplate x:Key="DimensionsTemplate" >
<TextBlock Text="{Binding}"
Padding="5"
VerticalAlignment="Center"
FontSize="32"/>
</DataTemplate>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
我正在尝试实现在ItemsControl中拖放项目的能力(即能够重新排序整数).有没有人有一个如何做到这一点的简单例子?我连接了PreviewMouseMove,DragEnter和Drop事件.问题是我无法弄清楚如何确定拖动哪个项目以及拖动它的位置.似乎整个ItemsControl都被传递到事件中.
我一直在编写OCR书籍扫描的东西(它通过读取页码重命名页面),并从我的基本CLI Python脚本切换到GUI.
我正在使用PyQT4并查看了大量关于拖放的文档,但没有运气.它只是拒绝接受这些文件!我正在将这些文章用于我的UI设计:
我注意到有很多方法可以设置PyQT4 GUI.哪一个效果最好?
哎呀,这是项目的源代码.
主要脚本:
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtGui import QListWidget
from layout import Ui_window
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_window()
self.ui.setupUi(self)
QtCore.QObject.connect(self.ui.listWidget, QtCore.SIGNAL("dropped"), self.picture_dropped)
def picture_dropped(self, l):
for url in l:
if os.path.exists(url):
picture = Image.open(url)
picture.thumbnail((72, 72), Image.ANTIALIAS)
icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
item = QListWidgetItem(os.path.basename(url)[:20] + "...", self.pictureListWidget)
item.setStatusTip(url)
item.setIcon(icon)
class DragDropListWidget(QListWidget):
def __init__(self, type, parent = None):
super(DragDropListWidget, self).__init__(parent)
self.setAcceptDrops(True) …Run Code Online (Sandbox Code Playgroud) 在PyQt 4中,我想创建一个QTreeView,可以通过拖放操作重新组织其结构.
我为QTreeView实现了自己的模型(QAbstractItemModel),因此我的QTreeView正确显示了数据.现在我想为树的节点添加拖放支持,以便能够将树内的节点从一个父节点移动到另一个节点,拖动复制等等,但是我找不到任何完整的教程如何实现这一点.我找到了很少的QTreeWidget教程和提示,但没有为自定义模型的QTreeView找到.有人能指出我在哪里看?
谢谢.
我试图将文件从Finder拖到我的SWT应用程序中.在Windows和Ubuntu上,以下代码可以工作:
public class DndTest {
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Drag & drop test");
shell.setSize(200, 200);
final FormLayout layout = new FormLayout();
shell.setLayout(layout);
final Label lbl = new Label(shell, SWT.NORMAL);
lbl.setAlignment(SWT.CENTER);
lbl.setText("Drop files here");
final FormData layoutData = new FormData();
layoutData.left = new FormAttachment(50, -100);
layoutData.top = new FormAttachment(50, -15);
layoutData.right = new FormAttachment(50, 100);
layoutData.bottom = new FormAttachment(50, 15);
lbl.setLayoutData(layoutData);
final DropTarget dt = …Run Code Online (Sandbox Code Playgroud) 我正在努力与看似简单的JavaScript练习,写一个香草拖放.我想我的'addeventlisteners'犯了一个错误,这里是代码:
var ele = document.getElementsByClassName ("target")[0];
var stateMouseDown = false;
//ele.onmousedown = eleMouseDown;
ele.addEventListener ("onmousedown" , eleMouseDown , false);
function eleMouseDown () {
stateMouseDown = true;
document.addEventListener ("onmousemove" , eleMouseMove , false);
}
function eleMouseMove (ev) {
do {
var pX = ev.pageX;
var pY = ev.pageY;
ele.style.left = pX + "px";
ele.style.top = pY + "px";
document.addEventListener ("onmouseup" , eleMouseUp , false);
} while (stateMouseDown === true);
}
function eleMouseUp () {
stateMouseDown = false;
document.removeEventListener ("onmousemove" , eleMouseMove …Run Code Online (Sandbox Code Playgroud) 在我的沙盒应用程序中,我试图将具有安全范围的NSURL放到粘贴板上,以便从NSTableView拖放到取景器(反之亦然).
拖动的代码非常简单,基本上在带有NSURL数组的粘贴板上执行writeObjects:
- (BOOL) tableView:(NSTableView *)tv
writeRowsWithIndexes:(NSIndexSet *)rowIndexes
toPasteboard:(NSPasteboard *)pasteboard
{
Crate *selectedCrate = (Crate *)[self.cratesListController selectedObjects][0];
NSMutableArray *pasteboardArray = [NSMutableArray array];
[rowIndexes enumerateIndexesUsingBlock:^(NSUInteger rowIndex, BOOL *stop) {
Track *selectedTrack = [self.tracksViewedInTrackList objectAtIndex:rowIndex];
[selectedTrack addURLToPasteboardArray:pasteboardArray];
}];
if (!pasteboardArray.count) {
return NO;
}
for (NSURL *url in pasteboardArray) {
[url startAccessingSecurityScopedResource];
}
[pasteboard writeObjects:pasteboardArray];
for (NSURL *url in pasteboardArray) {
[url stopAccessingSecurityScopedResource];
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,我实际上可以将文件放到我的桌面上,但我得到以下错误记录:
2013-11-19 10:29:30.897 Test[1287:532f] sandbox extension creation failed: permissions error for path: [/Users/didier/Music/Gigs/Air Miles (2000 …Run Code Online (Sandbox Code Playgroud) 我想要实现的是:
在前端,我使用html5文件api来读取文件,然后使用ajax将文件的内容上传到php后端,如果文件大小很小就可以了.但是,如果文件足够大,则会导致chrome崩溃.所以我使用file.slice将大文件拆分成块,当所有块都上传到php时,将块合并为一个完整的块.
代码如下:
前端:
<style>
#container {
min-width:300px;
min-height:200px;
border:3px dashed #000;
}
</style>
<div id='container'>
</div>
<script>
function addDNDListener(obj){
obj.addEventListener('dragover',function(e){
e.preventDefault();
e.stopPropagation();
},false);
obj.addEventListener('dragenter',function(e){
e.preventDefault();
e.stopPropagation();
},false);
obj.addEventListener('drop',function(e){
e.preventDefault();
e.stopPropagation();
var ul = document.createElement("ul");
var filelist = e.dataTransfer.files;
for(var i=0;i<filelist.length;i++){
var file = filelist[i];
var li = document.createElement('li');
li.innerHTML = '<label id="'+file.name+'">'+file.name+':</label> <progress value="0" max="100"></progress>';
ul.appendChild(li);
}
document.getElementById('container').appendChild(ul);
for(var i=0;i<filelist.length;i++){
var file = filelist[i];
uploadFile(file);
}
},false);
}
function uploadFile(file){
var loaded = 0;
var step = 1024*1024;
var …Run Code Online (Sandbox Code Playgroud) HTML Drag and Drop API定义了两个非常相似的事件,dragleave并且dragexit这些事件一起dragenter用于帮助跟踪当前的放置目标.
快速搜索没有发现任何当前和清晰的两个事件的文档,当一个应该使用另一个,以及浏览器支持,所以我想我会在这里问.
我将分享到目前为止我找到的资源:
dragexit而IE至少实现dragleave,主要区别在于事件的顺序:dragexit在相应之前触发dragenter,同时dragleave,令人困惑,之后触发.dragleave用IE语义定义,但后来(~2013)添加dragexit了Mozilla的语义.dragleave在Firefox 3.5(2009)中实现,最初是同义词dragexit,但后来(4.0,~2011?)将其更改为符合规范.dragexit具体说明drag-and-drop ×10
javascript ×3
html5 ×2
java ×2
pyqt ×2
python ×2
c# ×1
cocoa ×1
drag ×1
draggable ×1
filereader ×1
firefox ×1
html ×1
itemscontrol ×1
jtable ×1
php ×1
qtreeview ×1
swing ×1
swt ×1
wpf ×1