Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSlider没有更新吗?_Java_Swing_Jslider - Fatal编程技术网

Java JSlider没有更新吗?

Java JSlider没有更新吗?,java,swing,jslider,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);

我是一个在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);
    }
}
所以我创建了一个称为slider1的JSlider,我给它指定了方向和值。当我调用changeValue方法时,它显然改变了slider1的值。但是GUI上没有任何更改。 有人能给我指一下正确的方向吗?
它是否具有刷新GUI的功能

您没有在main方法中调用
changeValue()
。使changeValue()方法和滑块1
static
,然后在main中调用
changeValue()

static JSlider slider1; 

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

    add(slider1);
}

public static void changeValue () {
    slider1.setValue(35);
}

public static void main(String args[]) {
    Test gui = new Test();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setSize(550,250);
    gui.setVisible(true);

    changeValue();
}

最好的做法是将Java类名中每个单词的第一个字母大写。

test()
构造函数中初始化
slider1
变量后,添加以下行,以便可以设置jslider tick值并在GUI中可见:

slider1.setMajorTickSpacing( 5 );
slider1.setPaintLabels( true );
您可以自行更改设置为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);
}
我注意到您没有在
main()
方法中调用
changeValue()
方法。正如您的方法名称所暗示的,它似乎是一个setter,但是您没有参数化地给出设置值,这是一个好的实践吗?在我看来,不是这样。而且
changeValue()
setValue()
做了同样的事情,为什么要创建一个冗余方法呢?。无论如何,您可以使用以下选项:

public void changeValue (int newValue) 
{
    slider1.setValue(newValue);
}
在主方法中,使用以下语句:

test2 gui = new test2();
gui.changeValue( 25 );
要查看更改滑块值的即时效果,我的意思是更新它,使用按钮或其他组件,向其添加
ActionListener
,以便您可以在单击时更新滑块值,例如

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

您需要以某种方式调用changeValue:

我刚刚添加了一个带有ActionListener的JButton来实现这一点,并通过以下代码使其能够为我工作:

package testswing;

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

public class JSliderTest extends JFrame
{
    JSlider slider1; 
    JButton button1; 

    public JSliderTest()
    {
        setLayout(new FlowLayout());

        slider1 = new JSlider(JSlider.VERTICAL, 0, 50, 0);
        add(slider1);

        button1 = new JButton("Centre JSlider!");
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                changeValue();
            }   
        });
        add(button1);
    }

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

    public static void main(String args[]) {
        JSliderTest gui = new JSliderTest();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(550,250);
        gui.setVisible(true);
    }
}

changeValue()对我来说似乎很好。。。您确定正在调用此方法吗?将gui.changeValue()添加到要查看的主方法的末尾。您认为用户会问这个问题吗?您是否打开IDE、复制、粘贴代码并查看结果?我认为不是。首先,他应该改变构造函数,这样jslider就可以被看到。您的修复是正确的,他应该明确地调用change方法,但是在不使其可见的情况下,您无法理解它是否已更新。再次检查问题标题。@Declader:我确实在IDE中运行了代码,但没有从您的角度看到问题,从用户的角度来看,这可能是正确的。非常感谢,您的帖子很有教育意义!