如何将ChangeListener添加到JSlider中,以获得整数变量更新

问题描述 投票:0回答:1

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

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

我想要做的是让“0”不断更新JSlider的值。我有一个添加了.getValue()的ChangeListener,调用JSlider并设置为等于一个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);
java swing event-listener jslider changelistener
1个回答
1
投票

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

那是因为你没有改变边境的属性。

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

ChangeListener中的代码应为:

sectorSliderBorder.setTitle( ... );
© www.soinside.com 2019 - 2024. All rights reserved.