对于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有关?
发布于 2012-03-07 11:51:25
在test()构造函数中初始化slider1变量后,添加以下行,以便可以设置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);
}我注意到您没有在main()方法中调用changeValue()方法。正如您的方法名称所暗示的,它似乎是一个setter,但是您没有以参数形式给出设置值,这是一个好的实践吗?在我看来,它不是。changeValue()对setValue()也做了同样的事情,为什么要创建一个冗余的方法呢?无论如何,您可以使用以下命令:
public void changeValue (int newValue)
{
slider1.setValue(newValue);
}在main方法中,使用以下语句:
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-07 11:56:41
您需要以某种方式调用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-07 11:45:20
您没有在main方法中调用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类名称的每个单词的第一个字母大写。
https://stackoverflow.com/questions/9595282
复制相似问题