5

对于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 的功能?

4

3 回答 3

6

在构造函数中初始化slider1变量后test(),添加这些行,以便可以设置 jslider 刻度值并在 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);
}

我注意到您没有changeValue()在方法中调用main()方法。正如您的方法名称所暗示的那样,它似乎是一个设置器,但是您没有以参数方式给出设置值,这是一个好习惯吗?在我看来,事实并非如此。并且也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.
    }   
});
于 2012-03-07T03:51:25.103 回答
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);
    }
}
于 2012-03-07T03:56:40.543 回答
1

您没有changeValue()在 main 方法中调用。制作changeValue()方法和slider1 static,然后调用changeValue()main...

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 类名称。

于 2012-03-07T03:45:19.553 回答