【问题标题】:How to have an integer variable update as a result of a ChangeListener added to a JSlider如何通过将 ChangeListener 添加到 JSlider 来更新整数变量
【发布时间】:2018-03-03 20:56:39
【问题描述】:

我现在对 JSlider 有点麻烦,我对 java 还很陌生,所以这可能很容易纠正。

我有一个如下所示的 JSlider: JSlider Gui Image

我想要做的是让“0”不断更新到 JSlider 的值。我添加了一个 ChangeListener,并在 JSlider 上调用了 .getValue() 并设置为等于一个 int 变量,如下图所示:JSlider Code

这个 int 变量已在类中声明,因此它不是任何方法的本地变量,System.out.println() 证明 ChangeListener 正在工作,因为 JSlider 的值不断更新并打印在控制台中,但是int 变量似乎没有在此 ChangeListener 之外保存其值,因此不会在我想要的边框中显示当前值。

有人知道如何解决这个问题吗?

所有相关代码都在这里:

JPanel sectorSlider = new JPanel();

sectorSlider.setLayout(new BorderLayout());
TitledBorder sectorSliderBorder;

final int sectorNumberMin = 0;
final int sectorNumberMax = 50;
final int sectorNumberInitial = 12;
        JSlider sectorNumberSlider = new JSlider(JSlider.HORIZONTAL,
        sectorNumberMin, sectorNumberMax, sectorNumberInitial);
       sectorNumberSlider.setMajorTickSpacing(10);
sectorNumberSlider.setMinorTickSpacing(5);
sectorNumberSlider.setPaintTicks(true);
sectorNumberSlider.setPaintLabels(true);

sectorNumberSlider.addChangeListener(new ChangeListener() {
    @Override
    public void stateChanged(ChangeEvent event) {
        sectorValue = sectorNumberSlider.getValue();
        System.out.println(sectorValue);
    }
});

sectorSliderBorder = BorderFactory.createTitledBorder(blackline, "Number of Sectors: " +sectorValue);

sectorSliderBorder.setTitleJustification(TitledBorder.CENTER);
sectorSlider.setBorder(sectorSliderBorder);
sectorSlider.add(sectorNumberSlider);

【问题讨论】:

  • 复制粘贴!
  • 请分享一些(更多)不是图片的代码。
  • 请不要通过破坏您的帖子为人们增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 3.0 license 下授予 SE 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。
  • .setTitle() method however it is still not updating when the ChangeListener is working. - 您是否显示了从滑块返回的值?如果您有对 Border 的引用并且调用了侦听器并且值正确,则 Border 应该正确更新。如果没有,那么您的代码仍然有问题。发布您正确的minimal reproducible example 来证明问题。

标签: java swing event-listener jslider changelistener


【解决方案1】:

不会在我想要的边框中显示当前值。

那是因为您没有更改 Border 的属性。

您所做的只是更改变量的值。该变量与边界无关。您只是在创建边框时使用变量的值来初始设置边框的标题。

ChangeListener 中的代码应该是:

sectorSliderBorder.setTitle( ... );

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多