如何在 JList 中启用拖放

2024-01-26

我有一个 JList,并希望用户能够使用拖放功能对列表中的元素重新排序(使用我自己的 ListModel 和 ListCellRenderer,如果这有什么不同的话)。我需要创建哪些对象,以及如何处理该操作?


修改后的 Jan Taccis 答案:

public class DndTest extends JFrame {

    JList<String> myList;
    DefaultListModel<String> myListModel;

    public DndTest() {
        myListModel = createStringListModel();
        myList = new JList<String>(myListModel);
        MyMouseAdaptor myMouseAdaptor = new MyMouseAdaptor();
        myList.addMouseListener(myMouseAdaptor);
        myList.addMouseMotionListener(myMouseAdaptor);

        JPanel content = new JPanel();
        content.add(myList);
        this.add(content);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
    }

    private class MyMouseAdaptor extends MouseInputAdapter {
        private boolean mouseDragging = false;
        private int dragSourceIndex;

        @Override
        public void mousePressed(MouseEvent e) {
            if (SwingUtilities.isLeftMouseButton(e)) {
                dragSourceIndex = myList.getSelectedIndex();
                mouseDragging = true;
            }
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            mouseDragging = false;
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            if (mouseDragging) {
                int currentIndex = myList.locationToIndex(e.getPoint());
                if (currentIndex != dragSourceIndex) {
                    int dragTargetIndex = myList.getSelectedIndex();
                    String dragElement = myListModel.get(dragSourceIndex);
                    myListModel.remove(dragSourceIndex);
                    myListModel.add(dragTargetIndex, dragElement);
                    dragSourceIndex = currentIndex;
                }
            }
        }
    }

    private DefaultListModel<String> createStringListModel() {
        final String[] listElements = new String[] { "Cat", "Dog", "Cow", "Horse", "Pig", "Monkey" };
        DefaultListModel<String> listModel = new DefaultListModel<String>();
        for (String element : listElements) {
            listModel.addElement(element);
        }
        return listModel;
    }

    public static void main(String[] args) {
        new DndTest();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JList 中启用拖放 的相关文章

  • 如何在 Java 中验证从 Azure AD B2C 生成的 JWT 令牌?

    我正在寻找 Java 代码示例来验证 Azure AD B2C 令牌 我们可以使用哪些依赖项 所有 JWT 令牌的 JWT 令牌验证步骤或代码是否相同还是会有所不同 我们的项目中没有使用 Spring Security 有大量的图书馆her
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • 如何测试 Jersey REST Web 服务?

    我已经编写了一个 Restful Web 服务 并且必须使用 JUnit4 对其进行测试 我已经使用 Jersey Client 编写了一个客户端 但想知道我是否只能使用 junit4 测试我的服务 至少有人可以帮我提供样品吗 我的休息服务
  • JTree 避免重新加载后崩溃

    我正在尝试找到解决崩溃问题的方法JTree重新加载后 情况 JTree Office A Office A 1 Office A 1 1 Office A 1 2 Office B Office B 1 Office B 1 1 Offic
  • 视频文件转换/转码 Google App Engine

    我想启动一个云计算项目 其简单任务是 接收上传的视频文件 对它们进行一些转码 转换 允许用户下载 流式传输生成的文件 我刚在想ffmpeg作为集成在的外部命令行工具Java Google App engine Application 由于很
  • Java JNDI 名称 java:/

    我正在遵循教程 https docs oracle com javase tutorial jndi index html https docs oracle com javase tutorial jndi index html 我的冒险
  • Spring批量写入器限制

    我正在工作 Spring Batch 项目 从数据库读取记录然后写入rabbitmq 然后发送到HTTP消息网关 网关有150TPS我需要将我的应用程序限制为 150TPS 有没有办法带弹簧批的油门或者还有其他更好的方法吗 你能行的 在 S
  • android.os.FileUriExposedException 在 Oreo 中引起(仅!)[重复]

    这个问题在这里已经有答案了 从 Google Play Console 中 我可以看到此异常仅发生在 Android 8 0 的设备上 android os FileUriExposedException at android os Str
  • 在Java中读取制表符分隔的文件

    我有以下代码来读取 Java 中的制表符分隔文件 while str in readLine null if str trim length 0 continue String values str split t System out p
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • Java 7 中新的 JNLP 缺少项目警告是怎么回事?

    从 Java 6 切换到 Java 7 后 我的 JNLP 仍然工作正常 但它现在抛出一系列如下错误 Missing Application Name manifest attribute for http blah com app jar
  • 在仔细锁定但不受信任的代码上使用 Thread.stop()

    我知道Thread stop 已被弃用 并且有充分的理由 它通常不安全 但这并不意味着它是never安全 据我所知 在我想要使用它的上下文中它是安全的 而且 据我所知 我别无选择 上下文是一个两人策略游戏的第三方插件 以国际象棋为例 第三方
  • 检查对象是否为空

    我有一个链表 其中第一个节点包含空对象 表示firstNode data等于null firstNode nextPointer null firstNode previousPointer null 我想检查firstNode 是否为空
  • 当对话框打开时如何处理屏幕方向变化?

    我有一个 Android 应用程序 它已经在处理方向的更改 即有一个android configChanges orientation 在清单和onConfigurationChange 活动中的处理程序切换到适当的布局并准备它 我有一个横
  • Spring Boot - 如何在开发过程中禁用@Cacheable?

    我正在寻找两件事 如何在开发过程中使用 Spring boot dev 配置文件禁用所有缓存 application properties 中似乎没有通用设置可以将其全部关闭 最简单的方法是什么 如何禁用特定方法的缓存 我尝试像这样使用 S
  • oracle.jdbc.driver.OracleDriver ClassNotFoundException

    这是我收到错误的代码 我的classes12 jar已作为外部 jar 导入 import java io IOException import java io PrintWriter import java sql Connection
  • 为什么这段代码可以在 Java 7 中运行,而不能在 Java 8 中运行?

    我目前使用 IDE Eclipse 版本 Neon 2 Release 4 6 2 和版本 java Version 8 Update 131 在此代码中 IDE 给出错误 类型不匹配 无法从字节转换为整数 Integer i byte 1
  • 使用mapstruct映射不同类型列表的元素

    我们正在映射一个对象 该对象具有一个对象列表 这些对象都实现了父接口 但可能具有不同的实现 但当我们映射列表时 似乎只有来自 ParentClass 的值被映射 而不是来自子类的值 但直接映射子进程就可以了 public class Par
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 无法取消 GWT 中的重复计时器

    我正在尝试在 GWT 中安排一个重复计时器 它将每一毫秒运行一次 轮询某个事件 如果发现满意 则执行某些操作并取消计时器 我尝试这样做 final Timer t new Timer public void run if condition

随机推荐

  • 什么是 Linux 本地定时器中断?

    一切都在标题中 欢迎任何优秀文档的链接 本地定时器中断是在 APIC 上实现的定时器 它仅中断特定的 CPU 而不是引发可由任何 CPU 处理的中断 Bovet 和 Cesati 的 Understanding the Linux Kern
  • 在 C# 中将 string.Empty 转换为(通用)T?

    我有一个实用方法 它从旧的返回强类型值 INI配置类型文件 带有签名 internal static T GetIniSetting
  • 使用 Google 登录,仅允许组织域帐户

    我正在尝试创建一个只能通过 Google 登录才能访问且只能使用 GSuite 组织域 的 Web 应用程序 我希望这样做 而不需要事先初始化允许哪些域 这意味着它允许在 Google 下注册的所有电子邮件地址 但不允许 gmail com
  • 发布到 azure 后,与 MVC4 捆绑不起作用

    您好 我正在尝试为我的应用程序捆绑我的脚本 我的调试正在工作 如果我使用 Web debug 发布 一切都会正常 但是当我使用 Web releases 发布时 我的脚本不会加载 一切都在本地运行 只有当我从 VS2012 发布到 Azur
  • Swift 3 - Firebase 推送通知,我该怎么办?

    我确实喜欢下面的 Swift 2 但它在 Swift 3 中不起作用 我该如何提供这个 如果有人解释一下那就太好了 didFinishLaunchingWithOptions let notificationSettings UIUserN
  • 如何使用ANTLR生成的语法文件?

    我认为这是一个愚蠢的问题 但我刚刚开始使用 ANTLR 我将他们教程中的 SimpleCalc 语法放在一起 并以 C 作为目标语言生成它 我得到了 SimpleCalcParser c h 和 SimpleCalcLexer c h 作为
  • 正则表达式:懒惰更糟糕吗?

    我一直这样写正则表达式 a href target blank lt a 但我刚刚了解到这个懒惰的事 http www regular expressions info examples html我可以这样写 a href target b
  • Python无法访问字典

    Getting TypeError string indices must be integers当尝试访问 python 中的字典时 我尝试过使用json loads r2 这产生了 TypeError the JSON object m
  • 如何使用getCropAndSetWallpaperIntent?

    我尝试使用 getCropAndSetWallpaperIntent 方法 但出现错误 这是我的代码 Uri uri Uri parse content getFilesDir image path ContentResolver cont
  • Angular 8 嵌套拖放

    不幸的是我找不到常见问题的解决方案 这是代码的链接https stackblitz com edit angular ygwaxs https stackblitz com edit angular ygwaxs 我有这样的场景 从服务器我
  • 简单的 Javascript 碰撞检测?

    我正在尝试使用 jquery javascript html 和 css 制作一个简单的游戏 我一直陷入碰撞检测 code var map 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
  • 在 Sequel 中使用 UTC?

    我不想将时间存储在我当地的时区 但续集让我变得非常困难 我可以在将它们放在那里之前将它们设置为 UTC 有点痛苦 但是当我将它们取出时 它会假设它们是本地日期 然后它们都是未来的 8 小时 这是还没有实施的事情吗 如果是这样 有什么解决方法
  • UISearchBarSearchField 背景视图颜色

    I am trying to change the background color of the search bar text field and i have searched and tried lots of solutions
  • 流星模板中包含的谷歌地图被渲染两次

    我有以下模板
  • 设置 Visual Studio 代码以使用 R - “win32 无法使用 R”

    我正在尝试设置 R 以使用 Visual Studio 代码 当我用按键执行一行时CTRL ENTER我收到错误 win32 无法使用 R 我遵循本文中提出的建议中等职位 https medium com analytics vidhya
  • 如何设置phpmyadmin的用户名和密码[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何设置phpmyadmin的用户名和密码 我正在为 localhost 使用 xampp 软件 并且我想锁定我的 phpmyadmin 页面 当我打
  • Intl.NumberFormat 在节点和浏览器中的不同行为

    如果我在浏览器和节点中运行此代码 我会得到两个不同的结果 const moneyFormatter new Intl NumberFormat it IT style currency currency EUR minimumFractio
  • 如何在 jQuery 中永久运行 .animate 函数?

    this css left 100px function endless this animate left 100px easing linear duration 5000 complete function this css left
  • 实体框架级联删除 - FOREIGN KEY 约束

    我对以下模型有问题 public class ProjectPage Key public Guid Id get set public Guid HeaderId get set public ProjectPage Header get
  • 如何在 JList 中启用拖放

    我有一个 JList 并希望用户能够使用拖放功能对列表中的元素重新排序 使用我自己的 ListModel 和 ListCellRenderer 如果这有什么不同的话 我需要创建哪些对象 以及如何处理该操作 修改后的 Jan Taccis 答