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

如何在JScrollPane中实现位置敏感的缩放?

在 JScrollPane 中实现位置敏感的缩放需要以下几个步骤:

  1. 创建一个继承自 JScrollPane 的类,重写它的 getHorizontalScrollBarPolicygetVerticalScrollBarPolicy 方法,设置它们的值来创建位置敏感的滚轮。这两个方法返回值可以是 AS_NEEDED, ALWAYSNEVER,分别表示在需要时才生成、始终生成或从不生成滚轮。
  2. 重写 createTrackPropertyChangeListener 方法,在滚动条位置发生更改时创建一个位置敏感的监听器,该方法返回位置敏感的滚轮。
  3. 使用 ScrollPaneConstants 中的常量创建位置敏感滚轮和视图。

以下是创建位置敏感缩放的示例代码:

代码语言:java
复制
public class PositionSensitiveScrollPane extends JScrollPane {
    private static final String VERTICAL_SCROLL_POLICY = "verticalScrollBarPolicy";
    private static final String HORIZONTAL_SCROLL_POLICY = "horizontalScrollBarPolicy";

    public PositionSensitiveScrollPane() {
        setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    }

    @Override
    protected JComponent createScrollPane() {
        return super.createScrollPane();
    }

    @Override
    public void setUI(final javax.swing.ScrollPaneConstants uiAdatper) {
        super.setUI(new SimpleScrollPaneUI());
    }

    @Override
    public void changeSelectionToDefault() {
        super.changeSelectionToDefault();
    }

    @Override
    public void setHorizontalScrollBarPolicy(final int horizontalPolicy) {
        super.setHorizontalScrollBarPolicy(horizontalPolicy);
    }

    @Override
    public void setVerticalScrollBarPolicy(final int verticalPolicy) {
        if (verticalPolicy == javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) {
            super.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        } else if (verticalPolicy == javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER) {
            super.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        } else {
            // if the policy if different from always and never, we do nothing.
        }
    }

    @Override
    protected void createTrackPropertyChangeListener() {
        super.createTrackPropertyChangeListener();
    }
}

上述代码创建了一个新的 JScrollPane 子类并覆盖了一些父类的实现,以将滚动条的位置设置为位置敏感而不是总是显示。通过调用 setVerticalScrollBarPolicysetHorizontalScrollBarPolicy 方法来实现垂直和水平滚动条的位置敏感。

最后,可以使用 JComponent 的 setUI 方法来设置应用程序的外观。

在使用时,可以在 JScrollPane 类的配置中调用 setUI 方法来指定父应用程序的外观,并在创建该类的实例时调用 createScrollPane 方法来初始化 JScrollPane。在使用过程中,需要将滚动条的 VERTICAL_SCROLL_POLICYHORIZONTAL_SCROLL_POLICY 设置为位置敏感。

在需要使用位置敏感的滚动条时,可以将 JScrollPane 中的滚动条设置为位置敏感。例如,如果需要在列表中向下滚动时向下移动滚轮,可以在创建 JScrollPane 时调用以下方法:

代码语言:java
复制
JScrollPane scrollPane = new PositionSensitiveScrollPane();

在滚动列表时,可以调用 ScrollPaneConstants 中的相关常量来设置滚动条的垂直滚动属性以调整滚动位置。例如,可以使用以下代码来将滚动条移动到列表底部:

代码语言:java
复制
int bottomY = scrollPane.getViewport().getExtentSize().height;
int bottomMargin = scrollPane
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Laya 缩放实现

Laya 缩放功能实现 在 laya 实现滚轮对选中对象缩放,涉及到以下两个模块: 事件 容器坐标 1. 事件 在 Laya , Event 是事件类型集合。...这样可以避免同一个对象多次绑定问题, 在 laya ,事件管理器是允许同一个对象同一个方法事件进行多次绑定,这样容易造成许多意向不到 bug, 所以务必 只在使用时进行绑定,用完立马解除绑定...注意,鼠标移动事件、MouseUp 事件一般使用 Stage 来触发。...因此,对象在容器坐标为局部坐标,转换为全局需要逐层向父容器变换,知道跟容器 Stage 为止。 同时要注意: 在移动、缩放对象时不要改变对象坐标,改变容器坐标,实现对象改变。...50 : newScale); // 获取在缩放比例下,光标相对偏移位置 sp.x = sp.x - (x - sp.x) * (newScale - oldScale) / oldScale

1.7K30

何在keras添加自己优化器(adam等)

2、找到keras在tensorflow下根目录 需要特别注意是找到keras在tensorflow下根目录而不是找到keras根目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录下python目录中找到keras目录,以GPU为例keras在tensorflow下根目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

45K30
  • 【Java AWT 图形界面编程】使用小键盘按键缩放 Canvas 画布绘制背景图像 ( 键盘按键监听 + 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置缩放中心 示例 )

    + 以当前鼠标指针位置缩放中心 示例 ---- 在 【Java AWT 图形界面编程】Canvas 绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片...) 博客 , 新增鼠标滚轮缩放画布示例 , 但是使用鼠标拖动时 , 拖动效果也随之缩放, 缩小画布后 , 移动鼠标 , 移动距离对应缩放效果也随之缩小 ; 在 【Java AWT 图形界面编程...】使用鼠标滚轮放大缩小 Canvas 画布绘制背景图像 ( 鼠标滚轮事件监听器 MouseWheelListener | Canvas 绘制图像并设置图像大小 ) 博客 , 使用缩放背景图像方式..., 实现缩放效果 , 并同时福袋鼠标指针拖拽效果 ; 本博客实现案例 , 在上面的基础上 , 添加了鼠标滚轮缩放中心点设置为当前鼠标中心点 ; 1、代码示例 import javax.swing...H 标识放置在界面中心 ; 将鼠标指针放在 H 位置 , 点击一次 , 按下数字键 9 , 放大 9 倍效果如下 :

    1.8K20

    【Java AWT 图形界面编程】使用鼠标滚轮缩放 Canvas 画布绘制背景图像 ( 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置缩放中心 示例 )

    一、鼠标滚轮缩放中心点设置为当前鼠标中心点 - 要点分析 ---- 鼠标指针指向界面 Canvas 画布某个位置 , Canvas 画布绘制着一张超大图片 , 以该位置为中心 , 滑动鼠标滚轮时进行缩放...; 使用鼠标滚轮缩放后 , 在 Canvas 绘制图片尺寸肯定是放大或者缩小了 , 尺寸发生了改变 ; 图片缩放时 , 鼠标指针指向一个位置 , 该位置对应着一个当前 Canvas 画布 x...垂直方向比例 仍然保持不变 , 那就需要移动图片位置 ; 如果放大图片就需要将图片往左上方移动 ; 如果缩小图片就需要将图片往右下方移动 ; 此时可以分析出 , 如果要实现 鼠标滚轮缩放中心点设置为当前鼠标中心点..., 并设置图片位置 ; 这样图片缩放时 , 始终可以保证鼠标指向部位保持位置不变 ; 1、保存当前鼠标指针指向位置 首先 , 在类定义如下成员字段 , pointer_x 和 pointer_y...记录是鼠标指针指向界面 Camvas 画布坐标位置 ; pointer_ratio_x 和 pointer_ratio_y 记录是 鼠标指针指向位置对应图片中坐标位置比例 ; public

    2.8K10

    Python如何实现两行数据位置互换?

    一、前言 前几天在Python最强王者交流群【FiNε_】问了一个Python自动化办公问题。问题如下所示:两行数据位置怎么互换?第一行换到第二行这样这样 。...二、实现过程 这里【莫生气】给了一个指导,如下所示:如果是excel的话,先剪切第二行,然后插入到第一行上面就好了,或者剪切第一行,然后放到第二行后面。...sheet = workbook['Sheet1'] # 获取第一行和第二行数据 first_row = sheet[1] second_row = sheet[2] # 交换两行数据 for...文件 workbook.save('test1.xlsx') 当然上面这个代码还是有局限性,灵活性不高。...这篇文章主要盘点了一个Python自动化办公问题,文中针对该问题,给出了具体解析和代码实现,帮助粉丝顺利解决了问题。

    14110

    何在Python实现高效日志记录

    日志记录是软件开发重要组成部分,它可以帮助我们监控程序运行状态、诊断问题和优化性能。本文将详细介绍如何在Python实现高效日志记录,并提供详细代码示例。  ...1.使用Python内置logging模块  Python提供了一个功能强大内置模块`logging`,用于实现日志记录。...None  else:  logger.debug("Division successful")  return result  divide(10,2)  divide(10,0)  ```  在这个示例,...elapsed_time=time.time()-start_time  logger.info(f"slow_function tookseconds to complete")  ```  在这个示例,...总之,通过使用Python内置`logging`模块,我们可以轻松地实现高效日志记录。通过配置日志级别、格式和处理器,我们可以定制日志记录以满足我们需求。

    40871

    【Java AWT 图形界面编程】使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )

    1.0 设置鼠标滚轮监听 , 在 Canvas 组件 , 调用 addMouseWheelListener 函数 , 添加 鼠标滚轮监听器 MouseWheelListener , 实现该监听器...// 绘制图形 } } 二、绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放示例 ---- 在 【Java AWT 图形界面编程】Canvas 绘制超大图片 ( 使用鼠标拖动查看全图...| 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客 , 绘制了超大图像 , 可以使用鼠标拖动 , 这里在上述基础上 , 新增鼠标滚轮缩放示例 ;...以及 更新后坐标 private int startX, startY; // 当前位置偏移 private int offsetX = 0, offsetY = 0;...// 窗口设置可见 frame.setVisible(true); } } 2、效果展示 程序运行后默认效果 : 使用鼠标滚轮缩小画布 : 拖动缩小后画布到中央位置

    2.3K30

    JavaSwing 图形界面GUI王者级开发(大纲)

    2.11: JProgressBar(进度条) JavaSwing_2.12: JSlider(滑块) 3 面板 JavaSwing_3.1: JPanel(面板) JavaSwing_3.2: JScrollPane...: JTable(表格) JavaSwing_4.9: JTree(树) JavaSwing_4.10: JInternalFrame(内部窗口) 5 相关特性 JavaSwing_5.1: 组件位置和尺寸...Tray) JavaSwing_5.7: 闪屏(Splash Screen) 6 其他相关 Java绘图: 使用Graphics类绘制线段、矩形、椭圆/圆弧/扇形、图片、文本 Java图片操作 — 图片读取...、绘制、缩放、裁剪、保存 Java代码截屏:使用 Java 代码截取电脑屏幕并保存 Java模拟鼠标键盘输入事件 — Robot 类 Java操作桌面应用 — Desktop 类 Java操作系统剪贴板...(Clipboard)实现复制和粘贴 7 更多操作 如何在Swing组件中使用HTML 8 事件及其监听器 焦点事件及其监听器 - FocusEvent,FocusListener

    1.3K10

    何在MySQL实现数据加锁和解锁?

    加锁和解锁操作是MySQL中常用操作之一,下面将详细介绍在MySQL实现数据加锁和解锁方法和技巧。...一、MySQL锁类型 在MySQL,常用锁类型包括共享锁(S锁)和排他锁(X锁),其区别如下: 1、共享锁(S锁):允许多个事务同时获取同一资源共享锁,用于保证并发读取操作一致性。...在MySQL还有其他几种锁类型,行级锁、表级锁、意向锁等,这里不再赘述。...二、在MySQL实现数据加锁和解锁 在MySQL,数据加锁和解锁可以通过以下方法实现: 1、使用LOCK TABLES语句进行锁定和解锁操作 使用LOCK TABLES语句可以对指定表进行锁定...在MySQL实现数据加锁和解锁需要谨慎处理,需要根据具体情况选择合适方式进行操作,避免出现死锁、性能问题等不良后果。

    48010

    何在MQ实现支持任意延迟消息?

    知己知彼 虽然决定自己做,但是依旧需要先了解开源实现,那么就只能看看RocketMQ开源版本,支持18个Level是怎么实现,希望能从中得到一些灵感。 ?...TimeWheel TimeWheel大致原理如下: ? 箭头按照一定方向固定频率移动(手表指针),每一次跳动称为一个tick。ticksPerWheel表示一个定时轮上tick数。...每次tick为1秒,ticksPerWheel为60,那么这就和现实秒针走动完全一致。 TimeWheel应用到延迟消息 无论定时消息还是延迟消息,最终都是投递后延迟一段时间对用户可见。...假设这个延迟时间为X秒,那么X%(ticksPerWheel * tick)可以计算出X所属TimeWheel位置。...扩大时间轮 最直观方式,我们能不能通过扩大时间轮方式避免延迟9和延迟1落到一个tick位置上?

    6.1K50

    何在 React 组件优雅实现依赖注入

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程一种设计原则,可以用来减低计算机代码之间耦合度,其中最常见方式就是依赖注入(Dependency Injection...通过控制反转,对象在被创建时候,由一个调控系统内所有对象外界实体将其所依赖对象引用传递给它。也可以说,依赖被注入到对象。...一般这个概念在 Java 中提比较多,但是在前端领域,似乎很少会提到这个概念,其实用好这个思想无论在前后端一样可以帮助我们组件解耦,本文将介绍一下依赖注入在 React 应用。...使用 context 是实现依赖注入另一种方法 function counter() { const { message } = useContext(MessageContext); return...我们可以直接调用注入 provide 方法,而组件内部不用关心它实现

    5.6K41

    何在Python实现安全密码存储与验证

    然而,密码泄露事件时有发生,我们经常听到关于黑客攻击和数据泄露新闻。那么,如何在Python实现安全密码存储与验证呢?本文将向你介绍一些实际操作和技术。...2、 使用哈希算法进行密码加密 哈希算法是一种单向加密算法,它将输入密码转换成一串固定长度字符,而且相同输入始终产生相同输出。在Python,我们可以使用hashlib模块来实现哈希算法。...在verify_password()函数,使用相同盐值和用户输入密码进行加密,并将加密结果与存储在数据库密码进行比较。...通过使用盐值,即使黑客获取到数据库中加密后密码也无法直接破解,因为他们不知道盐值是什么,加大了密码破解难度。 在Python实现安全密码存储与验证需要使用哈希算法,并避免明文存储密码。...此外,为了进一步增强密码安全性,我们还可以结合其他技术,多重认证、密码策略等来提高整体安全性。 希望本文可以帮助你了解如何在Python实现安全密码存储与验证。

    1.3K20

    何在clickhouse实现连续时间,比如连续

    在我们业务如果按照天去查询数据结果,服务端返回数据可能会出现某些天没数据,这样就会出现输出前端某些天可能没有的情况,然后这样看数据就可能出现视觉差错,体验不好。...所以我们一般情况下要么通过sql来实现连续时间查询,比如连续天,要么通过程序处理时间,然后再循环数据按照某一天匹配之后返回结果给前端。...下面我们这里分享一下在clickhouse如何实现连续时间:连续天 我们在clickhouse实现连续时间首先要学习一下range,arrayMap,arrayJoin这三个函数使用。...2 │ │ 4 │ └──────────────────────┘ 好了上面三个函数已经给大家分享了一遍,下面我们直接看下如何实现连续天...实现2021.1.1到2021.1.10连续时间,我们首先需要用range把数组自增,然后通过arrayMap转换成对应时间,然后通过arrayJoin进行转换成列。

    2.3K50

    Java规模软件开发实训——简单文本编辑器(代码注释详解)

    项目功能 该项目最后实现以下功能: 代码编辑功能:提供一个代码编辑器,支持基本文本编辑操作,插入、删除、撤销和重做等。用户可以在编辑器编写代码,并对代码进行格式化和调整。...用户可以通过字体颜色菜单项选择编辑器字体颜色,通过字体大小菜单项调整编辑器字体大小。 文本缩放功能:支持放大或缩小代码编辑器文本内容。...文件操作:通过文件选择器实现打开和保存文件功能。 主题切换:通过菜单栏实现了切换主题功能,包括亮色和暗色主题。 文本编辑功能:支持撤销和重做操作,支持通过鼠标滚轮和快捷键进行文本缩放。...该代码虽然实现了基本文本编辑器和简单代码编译运行功能,但在实际使用可能需要进一步优化和改进 项目设计 设计流程图如下 系统实现 项目源码 package 文本编辑器; import javax.swing...我们实现了一个简单文本编辑器(CodeEditor),该编辑器具有打开、保存、编译、运行代码等功能,并支持撤销、重做、缩放文本等操作。

    16610

    何在前端大屏展示实现真正自助

    自助分析能力:大屏由来最终于是解决分析需求,因此大屏真正核心本质是能够服务于数据分析,让真正数据用户,按照自己思维逻辑在大屏操作分析数据,辅助决策,这就决定了大屏需要为用户提供“自助式分析能力...什么是自助式分析 自助式数据分析需要体现到四个层次: 自助数据准备:很多业务用户未具备专业IT技能,因此在实现数据分析过程,最让他们耗费时间最多就是如何对接实际业务数据,因此自助式分析第一步要解决...,自助数据准备,自助完成数据准备,并能关联本地数据,为数据分析提供更完备数据支持,通过简单易用数据准备器,拖拽完成即可实现多业务表关联,无需理解背后IT 技术。...应用场景: 很多情况下智慧政务或企业涉及到标准文稿通知等会有专用文件,会附加大屏供需要用户浏览或下载,因此需要在查看大屏时能够打开对应本地文件。...3.5 预览 从大屏到数据明细报表跳转,实现明细数据分析 当使用仪表板跳转报表有时需要传参数,这个传参可以来自于筛选器。

    1.3K10

    何在Python实现高效数据处理与分析

    本文将为您介绍如何在Python实现高效数据处理与分析,以提升工作效率和数据洞察力。 1、数据预处理: 数据预处理是数据分析重要步骤,它包括数据清洗、缺失值处理、数据转换等操作。...在Python,数据分析常常借助pandas、NumPy和SciPy等库进行。...()函数可以根据某个变量进行分组,并进行聚合操作,求和、平均值等。...在本文中,我们介绍了如何在Python实现高效数据处理与分析。从数据预处理、数据分析和数据可视化三个方面展开,我们学习了一些常见技巧和操作。...通过合理数据预处理,准确数据分析以及直观数据可视化,我们可以更好地理解数据,发现数据规律和趋势,为决策提供有力支持。

    35341

    何在MySQL实现数据时间戳和版本控制?

    在MySQL实现数据时间戳和版本控制,可以通过以下两种方法来实现:使用触发器和使用存储过程。...MySQL支持触发器功能,可以在数据库表上创建触发器,以便在特定数据事件(插入、更新或删除)发生时自动执行相应操作。因此,我们可以使用触发器来实现数据时间戳和版本控制。...-----+-----------------+---------------------+---------------------+---------+ 除了使用触发器,我们还可以使用存储过程来实现数据时间戳和版本控制...,存储过程相对于触发器来说,具有更高灵活性和可控性,但也需要更多代码编写和维护工作。...在MySQL实现数据时间戳和版本控制,可以通过使用触发器和存储过程两种方法来实现。无论采用哪种方法,都需要在设计数据模型和业务逻辑时充分考虑时间戳和版本控制需求,并进行合理设计和实现

    16710

    何在微服务实现分布式事务变通?

    需要改变思路和视角: 组合,如果您认为您应该合并几个微服务或将事务集成到一个服务,那么进行此练习永远不会晚。 为事务构建一致且有用审核,并确保您始终捕获审核,即使服务超时也是如此。...不要用假设场景进行测试(例如杀死服务,然后查看其他组件行为),而是尝试生成可能导致服务终止或超时情况或数据或序列,然后查看弹性/重试在其他服务工作方式。...将断路器集成到您生态系统,以便您能够检查所有服务(即将参与这些交易服务)是否都处于健康状态。这样,您甚至可以在开始交易之前就避免半成品交易。...在这里,您不必先编写分布式事务在两个数据库来创建新产品,而是首先只能在供应商数据库编写并运行批处理以挑选100个新产品并将其插入到消费者数据库。...对于订单微服务和库存微服务之间需要实现分布式事务,您可以使用以下设计以批处理替代: 在这里,您仍然可以进行扩展,隔离和独立部署,但是批处理过程将使其更加一致。

    51420

    何在生产环境实现Elasticsearch零停机升级

    如果集群包含索引是在前一个主要版本之前创建和写入,那么就需要重建索引才能在新版本得到支持。(例如,Elasticsearch 7.x不能读取5.x创建索引)。...只有当客户端应用程序可以与Elasticsearch两个版本进行通信,并且成功解决了应用程序代码所有重大更新时,才适合采用此解决方案。...尽管如此,在大多数情况下,测试环境通常没办法一一模拟现实世界场景。因此,总是建议有一个回归路径,以防万一出现问题。...3.1 蓝绿部署 在蓝绿部署,蓝色环境将提供100%流量服务,而绿色将准备就绪。为了进行迁移,流量将在环境之间一次性全部切换。...5.1 冒烟测试:构建验证 执行构建测试,以验证所有关键功能是否都可以在新版本按预期工作。冒烟测试主要目标是验证系统初始稳定性。

    7.1K50
    领券