JSlider没有更新?

swe*_*nny 5 java swing jslider

对于Windows中的整个绘图内容我是初学者,我现在有点卡住了.目前我只是测试出来的东西.

import javax.swing.*;
import java.awt.*; 
import javax.swing.event.*;

public class test extends JFrame
{
    JSlider slider1; 

    public test()
    {
        slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0);
        setLayout(new FlowLayout(FlowLayout.TRAILING));

        add(slider1);
    }

    public void changeValue () 
    {
        slider1.setValue(25);
    }

    public static void main(String args[]) {
        test gui = new test();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(550,250);
        gui.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个我称之为slider1的JSlider,我给它定位和值.当我调用changeValue方法时,它显然会更改slider1值.但是GUI没有变化.有人能指出我正确的方向吗?是否有刷新GUI的东西?

Juv*_*nis 6

slider1test()构造函数中初始化变量后,添加这些行,以便可以在GUI中设置和显示jslider tick值:

slider1.setMajorTickSpacing( 5 );
slider1.setPaintLabels( true );
Run Code Online (Sandbox Code Playgroud)

您可以自己更改刻度线间距,设置为5.使用add()方法添加滑块不是一个好习惯,getContentPane().add()而是使用,所以您的构造函数应如下所示:

public test2()
{
    slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0);
    setLayout(new FlowLayout(FlowLayout.TRAILING));
    slider1.setMajorTickSpacing( 5 );
    slider1.setPaintLabels( true );
    this.getContentPane().add(slider1);
}
Run Code Online (Sandbox Code Playgroud)

我注意到你没有changeValue()main()方法中调用方法.正如您的方法名称所暗示的那样,它似乎是一个setter,但是您没有参数化地给出设置值,这是一个好习惯吗?在我看来,事实并非如此.并且也changeValue()做同样的事情setValue(),为什么要创建一个冗余的方法?无论如何,你可以使用这个:

public void changeValue (int newValue) 
{
    slider1.setValue(newValue);
}
Run Code Online (Sandbox Code Playgroud)

在main方法中,使用以下语句:

test2 gui = new test2();
gui.changeValue( 25 );
Run Code Online (Sandbox Code Playgroud)

要查看更改滑块值的直接影响,我的意思是更新它,使用按钮或其他组件,添加一个ActionListener,以便您可以在单击时更新滑块值.

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        changeValue( 25 ); // change 25 to desired value.
    }   
});
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,你的帖子非常有教育意义! (2认同)