Java JSlider.getvalue 向 JTextField 返回正确的值,向 toolTipText 返回错误的值

标签 java swing jtextfield jslider

我使用 NetBeans 7.2。

我的JPanel1中有一个JSlider slider_random,输入值100,最小值0,最大值1000。我通过属性(自定义代码)为 slider_random 设置了一个 toolTipText:

"<html>Range (0-" + String.valueOf(slider_random.getMaximum()) + ")<br>Current: " + String.valueOf(slider_random.getValue())

还放置了一个 JTextField text_current 并将文本设置为 100,这会在我更改它时显示 slider_random 的值。

我将 stateChanged 事件设置为 slider_random:

private void slider_randomStateChanged(javax.swing.event.ChangeEvent evt) {
    slider_random.setToolTipText("<html>Range (0-" + String.valueOf(slider_random.getMaximum()) + ")<br>Current: " + String.valueOf(slider_random.getValue()));
    jTextField1.setText(String.valueOf(slider_random.getValue()));
}

我的问题是当我启动程序并指向它显示的 slider 时:

Range (0-1000)

Current: 50

然后稍微移动 slider ,然后移回原来的位置(同时我可以看到 text_current 的变化)所有数据都正确了,工具提示说:

Range (0-1000)

Current: 100

什么会导致我的问题?

Here's the screenshot, after I lauched it.

最佳答案

我能够重现您的问题。

问题是 jSlider 的默认值为 50。您将该值修改为 100,但这并没有反射(reflect)在 jSlider 的 setToolTip() 方法中,您在该方法中访问 jSlider 的值(通过自定义代码)。它将显示旧值 50。

要纠正这个问题,一种解决方案是在 slider 上创建一个鼠标悬停事件,这样当您运行应用程序并将鼠标指针悬停在 slider 上时,jToolTip 方法会选择最新的值并向您显示相同的值。它对我有用,所以我相信它对你也有用。

如果我能想到更好的解决方案,我会发布相同的解决方案。

关于Java JSlider.getvalue 向 JTextField 返回正确的值,向 toolTipText 返回错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057812/

相关文章:

java - 如何在 Swing 中全局设置应用程序的图标?

java GUI简单登录后端mysql

java - 这里指的是什么变量?

java - JSONArray 中的唯一 JSONObject

java - 在 JPA 中,是否有一种与数据库无关的方法来检查表是否存在?

java - 在添加到 Set 之前检查 Collection 是否为 null 的不同方法的优缺点是什么?

java - removeAll() 是否也会删除 JPanel 上的布局管理器?

java - 在 JTextField 和 setText 中撤消

java - 在点击鼠标的位置添加了一个 JTextField

java - 英里到公里转换器(事件驱动)