我是关于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的东西?
答案 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类名。