小编Jea*_*ves的帖子

如何检测用户在Java swing中使用触控板而不是鼠标?

我有一个Java swing应用程序,它使用'泛'JComponent来显示大数据.当用户移动鼠标滚轮时,我会听这些事件,并从滚动量更新JComponent的内容.

我想根据用户是否有不同的行为

  • 使用经典鼠标
  • 使用触摸板,可以在现代Mac笔记本电脑上找到.

我怎么能检测到用户正在使用鼠标滚轮和触控板来生成滚动事件?我依靠java 1.6 swing,si我不能去javaFX.

问题背后的故事:我只想在用户使用鼠标滚轮时为滚动事件添加一种很酷的惯性感.但是当然,在MacOSX上,触控板内置了自己的惯性.所以我想决定是否应该产生惯性运动.

java swing trackpad mouseevent

19
推荐指数
1
解决办法
1588
查看次数

在有向图上的广度优先搜索期间的边缘分类

我很难找到一种方法来正确地对边缘进行分类,同时在有向图上进行广度优先搜索.

在广度优先或深度优先搜索期间,您可以对满足4个类的边进行分类:

  • 背部
  • 交叉
  • 向前

Skiena [1]给出了一个实现.如果沿着从v1到v2的边缘移动,这里有一种在Java中的DFS期间返回类的方法,以供参考.父映射返回当前搜索的父顶点,以及timeOf()方法,即发现顶点的时间.

if ( v1.equals( parents.get( v2 ) ) ) { return EdgeClass.TREE; }
    if ( discovered.contains( v2 ) && !processed.contains( v2 ) ) { return EdgeClass.BACK; }
    if ( processed.contains( v2 ) )
    {
        if ( timeOf( v1 ) < timeOf( v2 ) )
        {
            return EdgeClass.FORWARD;
        }
        else
        {
            return EdgeClass.CROSS;
        }
    }
    return EdgeClass.UNCLASSIFIED;
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法在有向图上进行宽度优先搜索.例如:

下图 - 这是一个循环 - 是可以的:

A -> B
A -> C
B …
Run Code Online (Sandbox Code Playgroud)

algorithm graph-theory directed-graph breadth-first-search graph-algorithm

13
推荐指数
1
解决办法
5853
查看次数

Java中的巧妙异步重绘

我有一个用例来自GUI问题,我想提交给你的睿智.

用例

我有一个GUI,根据用户在GUI中设置的一些参数显示计算结果.例如,当用户移动滑块时,会触发几个事件,这些事件都会触发新的计算.当用户将滑块值从A调整为B时,会触发数十个事件.

但是计算可能需要几秒钟,而滑块调整可以每隔几百毫秒触发一次事件.

如何编写一个能够监听这些事件的正确线程,并对它们进行过滤以使结果的重绘更加生动?理想情况下,你会喜欢这样的东西

  • 收到第一次更改事件后立即开始新的计算;
  • 如果收到新事件则取消第一次计算,并用新参数开始新计算;
  • 但要确保最后一个事件不会丢失,因为最后完成的计算需要是具有最后更新参数的计算.

我试过了什么

我的一个朋友(A. Cardona)提出了一种更新程序线程的低级方法,可以防止太多事件触发计算.我在这里复制粘贴(GPL):

他把它放在一个扩展Thread的类中:

public void doUpdate() {
    if (isInterrupted())
        return;
    synchronized (this) {
        request++;
        notify();
    }
}

public void quit() {
    interrupt();
    synchronized (this) {
        notify();
    }
}

 public void run() {
    while (!isInterrupted()) {
        try {
            final long r;
            synchronized (this) {
                r = request;
            }
            // Call refreshable update from this thread
            if (r > 0)
                refresh(); // Will trigger re-computation
            synchronized (this) {
                if (r == request) { …
Run Code Online (Sandbox Code Playgroud)

java multithreading java.util.concurrent

7
推荐指数
1
解决办法
1337
查看次数

在Java中,什么事件*在鼠标按钮下连续*被触发?

我想知道Java中是否存在按下(按下)鼠标按钮时不断触发的事件,即使鼠标未移动也是如此.我在典型的MouseListeners中找不到它:

  • 仅当用户在按住按钮的同时移动鼠标时才会触发MouseDragged
  • 当按钮被的mousePressed只发射一次

这就是它.知道如何制作这样的活动吗?

干杯

JY

java awt mouseevent

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

设计模式来处理子类中的设置?

我有一个小的层次结构,所有类都实现了一个公共接口.

每个具体类都需要接收一个包含例如公共字段的设置结构.问题是设置结构

  • 有一个共同的部分
  • 另一部分从一个具体类到另一个具体不同

我想知道你是否有任何优雅的设计来处理这个问题.我想建立像:

BaseFunc doer = new ConcreteImplementation1();
Run Code Online (Sandbox Code Playgroud)

使用ConcreteImplementation1实现BaseFunc.并有类似的东西

doer.setSettings(settings)
Run Code Online (Sandbox Code Playgroud)

但是''settings''对象具有适合ConcreteImplementation1的具体实现.

你会怎么做?

java design-patterns

5
推荐指数
1
解决办法
1609
查看次数

预测返回中点圆算法的点数

众所周知的中点圆算法(维基百科)给出了给定半径圆的像素坐标的x,y坐标.

它使用的计算是迭代的,并在每次迭代时使用一个条件来退出循环: while (y > x) etc...

我的问题是如何提前预测,给定半径,算法返回的总点数是多少?

我的数学背景有限,我无法得出它.我用Google搜索了,我发现的唯一内容如下:http://www.gdunge.com/2011/03/23/a-different-kind-of-pi.该页面的作者道格提到,他通过实验发现,它的round(sqrt(2) * radius)工作时间为四分之一圆.我尝试了它试图获得整个圈子,它错过了几点.

这个数字背后的实质法则是什么?

algorithm raster

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