标签: drag-and-drop

JTable - 拖放

好的,这个问题超出了我的联盟.我正在尝试在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)

java swing drag-and-drop jtable

11
推荐指数
2
解决办法
2万
查看次数

使用HTML/JavaScript检测本地文件拖放

有一个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)

html javascript firefox drag-and-drop

11
推荐指数
1
解决办法
2万
查看次数

ItemsControl拖放

我有一个带有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都被传递到事件中.

c# wpf drag-and-drop itemscontrol

11
推荐指数
1
解决办法
9232
查看次数

PyQT4:将文件拖放到QListWidget中

我一直在编写OCR书籍扫描的东西(它通过读取页码重命名页面),并从我的基本CLI Python脚本切换到GUI.

我正在使用PyQT4并查看了大量关于拖放的文档,但没有运气.它只是拒绝接受这些文件!我正在将这些文章用于我的UI设计:

  1. http://tech.xster.net/tips/pyqt-drag-images-into-list-widget-for-thumbnail-list/

  2. http://zetcode.com/tutorials/pyqt4/dragdrop/

我注意到有很多方法可以设置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)

python drag-and-drop pyqt

11
推荐指数
1
解决办法
2万
查看次数

在PyQt中具有拖放支持的QTreeView

在PyQt 4中,我想创建一个QTreeView,可以通过拖放操作重新组织其结构.

我为QTreeView实现了自己的模型(QAbstractItemModel),因此我的QTreeView正确显示了数据.现在我想为树的节点添加拖放支持,以便能够将树内的节点从一个父节点移动到另一个节点,拖动复制等等,但是我找不到任何完整的教程如何实现这一点.我找到了很少的QTreeWidget教程和提示,但没有为自定义模型的QTreeView找到.有人能指出我在哪里看?

谢谢.

python drag-and-drop pyqt qtreeview

11
推荐指数
1
解决办法
1万
查看次数

拖放不适用于Mac

我试图将文件从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)

java swt drag-and-drop

11
推荐指数
1
解决办法
1672
查看次数

简单的拖放代码

我正在努力与看似简单的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)

javascript drag-and-drop draggable drag

11
推荐指数
2
解决办法
2万
查看次数

沙箱扩展创建失败错误

在我的沙盒应用程序中,我试图将具有安全范围的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)

cocoa drag-and-drop appstore-sandbox

11
推荐指数
0
解决办法
3139
查看次数

将大文件切成块并使用ajax和html5 FileReader上传

我想要实现的是:

在前端,我使用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)

javascript php html5 drag-and-drop filereader

11
推荐指数
2
解决办法
3万
查看次数

dragexit vs dragleave - 哪个应该用?

HTML Drag and Drop API定义了两个非常相似的事件,dragleave并且dragexit这些事件一起dragenter用于帮助跟踪当前的放置目标.

快速搜索没有发现任何当前和清晰的两个事件的文档,当一个应该使用另一个,以及浏览器支持,所以我想我会在这里问.

我将分享到目前为止我找到的资源:

  • HTML规范都有详细的时候应该是每个事件被解雇的描述,但它需要一些解密.
  • MDN文档(HTML拖放API和单独的dragexit/dragleave页面)没有多大帮助,说"当元素不再是拖动操作的直接选择目标时,会触发dragexit事件." /"当拖动的元素或文本选择留下有效的放置目标时,会触发dragleave事件." 并且没有提供有关dragexit的浏览器支持的信息(截至2017-03)
  • Dottoro的dragexit文档(谷歌的热门歌曲中的另一个)似乎已过时,声称"版本3.5中的dragexit事件在Firefox中已经过时了.请改用ondragleave事件."
  • Mozilla的bug 619703W3C bug 11568引用了这两个事件的历史:
    • 看起来像Gecko/Firefox最初实现,dragexit而IE至少实现dragleave,主要区别在于事件的顺序:dragexit在相应之前触发dragenter,同时dragleave,令人困惑,之后触发.
    • HTML5规范最初只dragleave用IE语义定义,但后来(~2013)添加dragexit了Mozilla的语义.
    • Gecko似乎已经dragleave在Firefox 3.5(2009)中实现,最初是同义词dragexit,但后来(4.0,~2011?)将其更改为符合规范.
    • caniuse表示HTML DnD API在现代浏览器中或多或少都受到支持,但没有dragexit具体说明

html5 drag-and-drop

11
推荐指数
1
解决办法
5517
查看次数