为什么Java的doClick()在调用doClick(pressTime)时需要使用68毫秒?

13

doClick()中,当它调用doClick(pressTime)时,它发送了68毫秒吗?为什么他们选择了68而不是更圆的数字?这是一个完全任意的数字吗?

来自Java AbstractButton:

public void doClick() {
    doClick(68);
}

1
这是一个有趣的问题,虽然我不确定它是否有一个明确的答案(因为它是一个显然没有在源代码中留下注释的任意决定)。虽然我对AWT的内部机制不是很熟悉,但可能会有一些更熟悉的人能够提供我没有看到的原因。 - nanofarad
我不会感到惊讶如果这是任意的,但如果有一个原因那就很好知道了! - Ian
我也很感兴趣——Java API和JVM背后的内部结构和设计决策是我的个人兴趣所在。 - nanofarad
2个回答

6

这可能与人类平均点击速度有关。

如果你看一下这个计时器,经过一些练习,平均可以达到68毫秒。

他们可能只是简单地设置了类似下面的环境,在那里试着达到一个不错的平均点击持续时间,然后将其用作默认值。

var timer = 0;
var results = [];
$('#clicktest').on('mousedown',function() {
    timer = window.performance.now();
});
$('#clicktest').on('mouseup',function() {
    results.push(window.performance.now()-timer);
    var total = 0;
    for(c=0;c<results.length;c++) {
        total+= results[c];
    }
    $('#output').text('Average click duration '+ Math.round(total/results.length)+'ms');
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="clicktest">Click me</button>
<div id="output">Average click duration N/A</div>


1
请注意,大多数绘画工件仅适用于默认情况下的 Metal L&F ,例如 Windows L&F 完全忽略此方法,它没有这种方法作为同行或返回给在Win会话中运行的编程语言。

  • doClick是以编程方式模拟JButton按下的操作,例如来自鼠标或键盘事件(TABENTER

  • doClick(int pressTime)将操作可视化为向用户提供的信息,通过在屏幕上绘制isPressed,JVM返回的毫秒数非常接近(对于doClick(2000),为1999-2001)

  • 68毫秒的非常低的数字没有任何屏幕效果,因为人眼无法捕捉到它,也许大多数液晶/ LED显示器无法正确重绘这个绘画工件。

  • @Michael Dibbets的答案更接近于setMultiClickThreshhold(long threshhold)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接