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的东西?
slider1在test()构造函数中初始化变量后,添加这些行,以便可以在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)