JSlider没有更新?

时间:2012-03-07 03:09:52

标签: 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);
    }
}

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

3 个答案:

答案 0 :(得分:6)

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

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);
}

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

public void changeValue (int newValue) 
{
    slider1.setValue(newValue);
}

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

test2 gui = new test2();
gui.changeValue( 25 );

要查看更改滑块值的直接影响,我的意思是更新它,使用按钮或其他组件,向其添加ActionListener,以便您可以在点击时更新滑块值。 / p>

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

答案 1 :(得分:3)

你需要以某种方式调用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);
    }
}

答案 2 :(得分:1)

您没有在主要方法中调用changeValue()。创建changeValue()方法和slider1 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类名。