Tag: scaling

如何支持缩放JScrollPane中显示的视图以避免将JScrollBars显示到最小尺寸?

我想要实现的行为是默认情况下以1:1的比例显示视图。 如果其容器变大(由用户动态调整父JFrame的大小),则应缩放视图以适应更大的区域; 如果缩小,视图应缩放以适应较小的区域 – 达到极限。 当小于最小尺寸时,滚动条应与视口一起出现,以支持在最小比例显示的视图周围导航。 我现在有一个运行不良的实现,使用JScrollPane和ComponentListener来确定何时发生resize。 基于新大小,设置新的比例因子以绘制视图以适合(最小比例),设置视图的preferredSize并调用revalidate()。 问题是这会导致“抖动”显示; 当调整超过应用新比例的点以避免显示滚动条时,滚动条会出现,然后消失。 我相信这是因为我的方法是react native的,而不是预测性的。 也就是说,LayoutManager仅查看视图的preferredSize并基于此执行布局。 我正在侦听JScrollPane的大小调整,当它只是太小时才更改视图的preferredSize,然后通过调用revalidate()使容器再次布局。 至少这是我理解它的方式。 我一直在审查JScrollPane,JViewport及其相应的LayoutManagers的源代码。 在这一点上,我正在考虑将一个或多个子类化为更好(预测,导致更平滑的大小调整)实现。这似乎是其他人必须实现的行为。是否有另一种方法来使用现有的Container / LayoutManagers /方法来执行这没有子类化并冒着跨越不同LnF或平台的意外行为的风险? 编辑:我已经攻击了ScrollPaneLayout的原型子类。 它在添加滚动条之前检查视图的最小大小。 这是有效的(因为滚动条在视口小于视图的最小大小之前不会出现,而不是在视口小于视图的首选大小时显示滚动条的原始行为)但是当显示滚动条时,视图会认为它仍然是首选尺寸,而不是最小尺寸。 我也可能不得不破解ViewportLayout类,但这很快就会成为我怀疑会强大的东西。 编辑: 我回到基础并再次尝试了这些建议,并取得了成功。 我尝试重载ScrollPaneLayout和ViewportLayout的默认行为,以及它们之间的交互不是正确的方向。 在我第一次尝试之后,我确信在LayoutManagers完成他们的工作之后,没有办法避免我的“反应”方法的闪烁和不稳定性来修复不正确的大小。 幸运的是,有一种方法可以在没有子类化LayoutManager的情况下完成这项工作 – 如上所述,它是通过实现Scrollable接口(我之前已经正确完成,但没有进行其他更改以使其工作)。 诀窍的确是实现getScrollableTracksViewport(),使其根据视口大小返回true / false。 除了我正在做的其他计算之外,我还没有做的是更新视图的preferredSize。 这是至关重要的一步。 (请注意,我还依赖于侦听ComponentListener.componentResized()通知来触发正确设置返回值所需的计算。function代码如下所示,即可获得帮助。 @SuppressWarnings(“serial”) class ScalingScreenPanel extends JScrollPane { private static final Dimension PREFERRED_SIZE = new Dimension(800,200); private static ScalingScreen sScreen; […]

如何扩展Quartz调度程序?

我计划使用Quartz调度程序,因为我阅读了许多关于它的好意见。 我的问题如下:在任何给定时间,我将有数千个触发器存在于系统中。 大多数触发器只触发一个事件而死亡。 此外,我很可能在分配后取消许多工作(基于新输入)。 石英可以扩展到这个吗? 建议使用哪个JobStore? 我打算在mysql上使用JDBC。 补充信息 :我的工作将通过HTTP发送电子邮件或将数据发布到其他服务(通过WAN)。

为什么这个Java代码不使用所有CPU内核?

附加的简单Java代码应该在使用正确的参数启动时加载所有可用的cpu内核。 例如,你开始使用它 java VMTest 8 int 0 它将启动8个线程,除了循环并将2添加到整数之外什么都不做。 在寄存器中运行的东西,甚至不分配新的内存。 我们现在面临的问题是,当运行这个简单的程序(当然有24个线程)时,我们没有加载24核机器(AMD 2个插槽,每个12个核心)。 类似的事情发生在每12个线程或更小的机器的2个程序。 所以我们怀疑JVM(Linux x64上的Sun JDK 6u20)不能很好地扩展。 有没有人看到类似的东西或有能力运行它并报告它是否在他/她的机器上运行良好(> =仅8个核心)? 想法? 我在带有8个内核的Amazon EC2上尝试过,但虚拟机似乎与真正的盒子不同,因此加载的行为非常奇怪。 package com.test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class VMTest { public class IntTask implements Runnable { @Override public void run() { int i = 0; while (true) { i = […]