首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在JTable中拖放行?

在JTable中拖放行,可以通过实现自定义的TransferHandler和DragGestureListener来实现。以下是一个简单的示例:

  1. 首先,需要创建一个自定义的TransferHandler,用于处理行的拖放操作:
代码语言:java
复制
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

public class RowTransferHandler extends TransferHandler {
    private JTable table;

    public RowTransferHandler(JTable table) {
        this.table = table;
    }

    @Override
    protected Transferable createTransferable(JComponent c) {
        JTable table = (JTable) c;
        int row = table.getSelectedRow();
        int col = table.getSelectedColumn();
        Object value = table.getValueAt(row, col);
        return new StringSelection(value.toString());
    }

    @Override
    public boolean canImport(TransferSupport support) {
        return support.isDataFlavorSupported(DataFlavor.stringFlavor);
    }

    @Override
    public boolean importData(TransferSupport support) {
        if (!canImport(support)) {
            return false;
        }

        JTable.DropLocation dl = (JTable.DropLocation) support.getDropLocation();
        int row = dl.getRow();
        int col = dl.getColumn();
        int max = table.getModel().getRowCount();

        if (row < 0 || row > max) {
            return false;
        }

        try {
            String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
            table.getModel().setValueAt(data, row, col);
            return true;
        } catch (UnsupportedFlavorException | IOException e) {
            e.printStackTrace();
        }

        return false;
    }
}
  1. 接下来,需要创建一个自定义的DragGestureListener,用于监听拖动操作:
代码语言:java
复制
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;

public class RowDragGestureListener implements DragGestureListener {
    private JTable table;

    public RowDragGestureListener(JTable table) {
        this.table = table;
    }

    @Override
    public void dragGestureRecognized(DragGestureEvent dge) {
        Point clickPoint = dge.getDragOrigin();
        int row = table.rowAtPoint(clickPoint);
        table.getSelectionModel().setSelectionInterval(row, row);

        Transferable transferable = new StringSelection("");
        dge.startDrag(DragSource.DefaultMoveDrop, transferable, new RowDragSourceListener(table));
    }
}
  1. 最后,需要将这两个自定义的类应用到JTable中:
代码语言:java
复制
JTable table = new JTable();
table.setDragEnabled(true);
table.setTransferHandler(new RowTransferHandler(table));
table.getColumnModel().getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(table, DnDConstants.ACTION_MOVE, new RowDragGestureListener(table));

这样,就可以在JTable中实现行的拖放操作了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试511】如何在Oracle写操作系统文件,写日志?

题目部分 如何在Oracle写操作系统文件,写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...image.png 其它常见问题如下表所示: 问题 答案 Oracle哪个包可以获取环境变量的值? 可以通过DBMS_SYSTEM.GET_ENV来获取环境变量的当前生效值。...在CLIENT_INFO列存放程序的客户端信息;MODULE列存放主程序名,包的名称;ACTION列存放程序包的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle写操作系统文件,写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

28.8K30
  • java winform开发之JTable全攻略

    ,而在java Swing,它的名字叫JTable。...的行添加标识,行id等;4)怎样在JTable动态添加新行;     1)JTable的基本用法: 我用的IDE是NetBeans,由于也是简单做几个页面的客户端,主要还是Web开发的,所以暂时不打算深究...java winform开发,所以界面怎么快就怎么做了,我直接在窗体的“设计”模式下直接“表格”出来就了事,在默认的情况下,这个表格还会有几行几列的填充内容的,如果需要编辑,可以先点击表格进入它的编辑状态...2)怎样添加行点击事件 首先,在JTable的设计视图中先选中JTable,然后右击,在事件的弹出菜单依次选中"mouse-click”就可以捕捉表格的点击事件了,在这个事件监听方法,会传入一个java.awt.event.MouseEvent...只要在这个对象重写一下toString()方法,将我们希望在单元格显示的内容return出来就可以了,只JTable本身,并没有提供设置行id等识别表格行对象的方法,所以我想到了自己定义一个单元格对象

    1.2K30

    何在Java中使用Table

    在Java,开发人员可以使用JTable方法在其应用程序创建表。JTable是从JComponent类继承的Swing组件。 如何在Java创建表 要创建表,需要创建JTable类的实例。...另一个值得关注的问题是,如果您在数据库对象查询特定值,则必须将所有值复制到数组或向量。 为了避免这些问题,您可以使用模型创建表格。 如何在Java中使用模型创建表 首先,了解如何处理表数据很重要。...如何在Java管理列宽和列高 如果要设置行的高度,可以使用setRowHeight()方法。...下面是一些示例代码,说明如何在Java设置表的列宽: TableColumnModel columnModel = table.getColumnModel(); columnModel.getColumn...(2).setPreferredWidth(200); 小结 在本编程教程,程序员学习了如何使用JTable或表模型在Java创建表。

    2.1K40

    java swing 添加 jcheckbox复选框

    ②然后我们需要将表格对象创建出来并放入该容器控件,(JDK_API_1_6_zh_CN.CHM)创建表格控件。...值得一提的是在这七个构造方法,设计器(如果您使用了MyEclipse)使用的是JTable(TableModel dm)这个版本。...而一般情况使用JTable(Vector rowData,Vector columnNames)       在Java方法,如果参数需要传递接口,可以在调用方法时传递一个(匿名)对象,该对象是一个不具名的类的实例...在详细说明之前先解释一下JTable的显示原理:       首先是数据来源,您使用JTable的构造方法,大部分重载参数即包含了数据,比如JTable(VectorrowData, Vector columnNames...)Vector保存的数据(Vector相当于数组)。

    3.3K00

    值得练手的JavaGUI项目——色彩调节器的实现【附完整源码】

    我们用到了JSlider控件,也就是滑块控件,在该控件后面对应的三个参数分别是滑块的最小值,滑块的最大值,滑块初始时的默认位置,代表红色RGB值的滑块,最小值是0,最大值是255,当程序运行时滑块默认处于的位置是...同时,继承ChangeListener 这个接口的类(监听者)需要重写stateChanged(ChangeEvent e1) 方法,在该方法对事件进行处理。...import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTable...; import javax.swing.event.ChangeListener; //定义Toning_device类继承窗体类,并且实现接口ChangeListener 监控组件的值发生改变,滑块的值...JFrame implements ChangeListener{ //将控件设置为公有权限 public JSlider js_red,js_green,js_blue; //定义滑块控件 public JTable

    2.4K20

    跟我学Springboot开发后端管理系统7:Matrxi-Web权限设计

    在Javaweb开发,有很多权限开发的框架,比如shrio、Spring security,但是都比较重量级。作为一个后端管理系统来说,用这样的权限开发框架会慢开发进度。...在RBAC,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。...Who:是权限的拥有者或主体(:User,Role)。 What:是操作或对象(operation,object)。 How:具体的权限(Privilege,正向授权与负向授权)。...后续浏览器发起请求时都携带该Token,请求达到后端后,会在Filter进行判断,首选判断是否为白名单url(比如登录接口url),如果是则放行;否则进入Token验证。...如果有Token且解析成功,则放行,否则,返回无权限访问。 Filter判断后,请求达到具体的Controller层,如果在Controller层上加上了权限判断的注解,则生成代理类。

    54320

    Mysql数据--死锁解密

    Mysql行锁是在引擎实现的,并不是所有的存储引擎都支持行锁,比如myisam就不支持行锁,而innodb支持行锁,myisam在并发度高的系统中就会影响系统的性能,因为他仅仅支持表锁,这也就是他被innodb...直到事物A是在提交事物之后,才会释放行锁,知道了这个原理,发现并不是不需要的时候就去释放行锁,而是等待事物提交之后才会真正的释放锁,这就是二阶段锁 那么这能给我们业务系统起到什么作用呢,在事物中含有多个行锁的时候...,尽量要把引起所冲突,最可能引起并发的锁向后,举个例子 在某电影院中,一个人A需要购买电影票,主要涉及下面几种业务操作 扣除我们账户的金额 在电影院中增加电影票的金额 记录一条都买记录 与此同时,另外一个人...如何解决的呢,到这里我们必须了解几个概念 死锁和死锁检测 并发系统多个不同线程循环依赖资源,在多个线程就会等待其他线程释放资源,互相等待,这就是死锁,举个例子 ?...但是要注意可能退票的场景,导致金额为0的时候,这个时候需要特殊处理进行了 今天我们主要说了行锁,二阶段锁,以及死锁,死锁检测,如何处理热点行的处理,提供了几种方案,以及二阶段锁,事物中有多条行锁,尽量把有所冲突的行向后

    1.5K10

    你一定要知道,关于https的五大误区

    误区1:https会慢网站的访问速度 随着互联网用户的增加,用户可能担忧https会降低网站的访问速度。...在大多数情况下,https实际上是指http/2,它是标准http协议的修订版本,旨在通过压缩数据和减少涉及的流程,将页面加载时间缩短50%,如果做好https性能优化,https并不会慢网站的访问速度...通常情况下,公司的网关会截取并分析所有的网络通信,但当它遇到https连接时就只能直接放行,因为https经过加密无法被解读。由于少了这个解读过程,所以https会更快。...现在所说的免费SSL证书都是最低级别的DV SSL证书,对于高级的EV SSL证书来说,需要提交真实可靠的资料(企业营业执照、组织机构代码证等),并且需要经过CA人工审核通过后才可颁发,很多企业因为提交资料不齐全或不真实而导致申请失败...随着申请SSL证书的用户越来越多,在SSL证书申请过程依然还有很多内容需要注意。

    66740

    配置宝塔面板 FTP,轻松从服务器传文件

    本文将全面介绍如何在宝塔面板配置FTP服务,包括用户创建、端口设置、防火墙调整,以及FileZilla连接方法 一、FTP基础知识 在开始配置之前,让我们先了解一些FTP的核心概念: FTP 工作模式...它们具有以下特点: 通常由系统或重要服务使用(FTP 20/21,SSH 22,HTTP 80)。 在Unix-like系统,仅root用户可绑定这些端口。...四、调整防火墙设置 宝塔面板防火墙: 进入"安全"模块 找到"防火墙"选项 添加放行端口,输入设置的FTP端口 云服务器安全组(以腾讯云为例): 进入安全组设置:https://console.cloud.tencent.com.../vpc/security-group 选择对应安全组 添加入站规则,放行FTP端口 21 和刚刚设置的端口 五、使用FileZilla连接 安装FileZilla客户端 打开FileZilla,填写信息

    76720

    DevOps之静态代码扫描

    技术债同财务债一样,是有利息的,还债的时间的越长,就需要支付更多的利息。很多临时性的代码、不合理的架构最终都会造成严重的后果。...复杂度:代码结构太复杂(圈复杂度高),难以理解、测试和维护。 测试覆盖率:编写单元测试,特别是针对复杂代码的测试覆盖是否足够。 设计与架构:是否高内聚、低耦合,依赖最少。...Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理开源工具之一。...3)每个规则有默认严重级别,需要根据项目情况调整重要级别 例如,在Sonar展示的代码规则违反分类数量统计,分为5个级别:Blocker、Critical、Major、Minor、Info ?...,是否达到放行标准,提前消除技术债务。

    1.9K10

    认知指纹:颠覆性的身份认证技术

    DEFCON 2013,InsidePro小组在48小时内破解了52713组密码 近几年频发的库、撞库事件,让互联网公司及广大网民头痛不已。...生物学认证方式 这种类型大家也不会陌生,一部分先进的科技已经应用到了我们的日常生活 指纹识别 虹膜识别 脸部识别 声纹识别 静脉识别 2 眼部追踪 3 这些认证技术无一例外,都需要借助外设,有的还价格不菲...并且这些手段都是强制性干预,会在用户操作的过程中进行阻断,得到用户的反馈之后,方可进行认证、放行。跟传统认证手段一样,此种认证是无状态、不可持续的,仅能保证在认证的那一瞬间是有效的。...比如翻页,有的人喜欢用键盘,有的人喜欢滚动条,而多部分人倾向于直接使用滚轮,这些数据都可以作为建立用户认知指纹的维度。...:手特别冷的时候 行业动态 美国国防部DARPA在2012年启动了Active Authentication4项目,意在研究一种可持续的认证方式,防止用户登录之后会话被恶意盗用,目前项目仍在研究阶段。

    1.2K100

    每日论文速递 | 当缩放遇到LLM微调:数据、模型和微调方法的影响

    全模型微调(FMT)与参数高效微调(PET,包括提示调整和LoRA)的缩放行为:研究者们在数据受限的情况下(即LLM模型大小远大于微调数据大小)探索这两种微调方法的缩放行为。...多模态和多任务学习(Multi-Modal and Multi-Task Learning):研究者们探索了在多模态数据(如图像和文本)上训练和微调模型的方法,以及如何在多个任务之间共享和转移知识。...性能评估: 使用了不同的评估指标,token级别的困惑度(PPL)来评估微调性能。 对于生成任务,使用了BLEURT和RougeL等指标来评估翻译和摘要的质量。...超参数优化: 对微调过程的超参数(学习率、批量大小等)进行更细致的调整,以进一步提高微调效率和性能。...模型架构的影响: 研究不同的模型架构(Transformer、CNN等)对微调缩放行为的影响。

    47810

    低代码引擎实战-从零封装低代码组件

    上一篇文章讲了如何开始使用阿里低代码引擎 low-engine,以及如何在引擎 demo 引用自定义组件,本篇将基于 vant 和 antd 封装一些低代码组件,带领大家熟悉自定义组件的封装和注意事项...如果想添加新的属性,或者代码组件的 props 定义的属性没有显示出来,则需要手动新增 props。 direction属性想要枚举值,只有 row和 column两个属性值。...antd/lib/table"; export interface JTableProps { columns: ColumnsType; dataSource: any[]; } const JTable...(

    ); } export default JTable...这种方法有个缺点,在组件库封装过程,其实是看不到效果的,因为渲染不出来。只有在具体使用组件库的时候,才会渲染出来,调试不方便。

    2.4K21
    领券