上面这个例子中,你是否觉得好像少了什么?没错,就是刻度!接下来,我们来设置JSlider的刻度与数字,并增加一些设置项目,完 整的JSlider组件就大功告成了.
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.*;
public class SliderDemo2 implements ChangeListener {
JFrame f = null;
JSlider slider1;
JSlider slider2;
JSlider slider3;
JLabel label1;
JLabel label2;
JLabel label3;
public SliderDemo2() {
f = new JFrame("JSlider Example");
Container contentPane = f.getContentPane();
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(2, 1));
slider1 = new JSlider();
// setPaintTicks()方法是设置是否在JSlider加上刻度,若为true则下面两行才有作用。
slider1.setPaintTicks(true);
/*
* 设置大刻度与小刻度之间的距离(setMajorTickSpacing()与setMinorTickSpacing()方法).例如若大刻度间距离为30
* ,小刻度间距离为10,则表示2个大刻度间会有3个小刻度.
*/
slider1.setMajorTickSpacing(20);
slider1.setMinorTickSpacing(10);
// setPaintLabels()方法为设置是否数字标记,若设为true,则JSlider刻度上就会有数值出现。
slider1.setPaintLabels(true);
// setPaintTrack()方法表示是否出现滑动杆的横杆。默认值为true.
slider1.setPaintTrack(true);
// setSnapToTicks()方法表示一次移动一个小刻度,而不再是一次移动一个单位刻度。
slider1.setSnapToTicks(true);
label1 = new JLabel("目前刻度:" + slider1.getValue());
panel1.add(label1);
panel1.add(slider1);
panel1.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createEtchedBorder(), "Slider 1", TitledBorder.LEFT,
TitledBorder.TOP));
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(2, 1));
slider2 = new JSlider(JSlider.HORIZONTAL);
slider2.setMinimum(0);
slider2.setMaximum(100);
slider2.setValue(30);
slider2.setExtent(50);
slider2.setPaintTicks(true);
slider2.setMajorTickSpacing(10);
slider2.setMinorTickSpacing(2);
slider2.setPaintLabels(true);
/*
* JComponent提供了一个putClientProperty()方法,可以使得JSlider中的小于滑动杆位置与大于滑动杆位置间的颜色不
* 一样
* ,这样的视觉效果会比较好,"JSlider.isFilled"值是定义在MetalSliderUI这个类的SLIDER_FILL常数中,
* 此类是定义在java的JSlider默认外观,你可以在javax.swing.plaf.metal.package中找到这个类。
*/
slider2.putClientProperty("JSlider.isFilled", Boolean.TRUE);
label2 = new JLabel("目前刻度:" + slider2.getValue());
panel2.add(label2);
panel2.add(slider2);
panel2.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createEtchedBorder(), "Slider 2", TitledBorder.LEFT,
TitledBorder.TOP));
JPanel panel3 = new JPanel();
panel3.setLayout(new GridLayout(2, 1));
slider3 = new JSlider(20, 80);
slider3.setOrientation(JSlider.VERTICAL);
slider3.setPaintTicks(true);
slider3.setMajorTickSpacing(30);
slider3.setMinorTickSpacing(10);
slider3.setPaintLabels(true);
slider3.putClientProperty("JSlider.isFilled", Boolean.TRUE);
label3 = new JLabel("目前刻度:" + slider3.getValue());
panel3.add(label3);
panel3.add(slider3);
panel3.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createEtchedBorder(), "Slider 3", TitledBorder.LEFT,
TitledBorder.TOP));
slider1.addChangeListener(this);
slider2.addChangeListener(this);
slider3.addChangeListener(this);
panel1.setPreferredSize(new Dimension(300, 130));
panel2.setPreferredSize(new Dimension(300, 130));
panel3.setPreferredSize(new Dimension(150, 260));
GridBagConstraints c;
int gridx, gridy, gridwidth, gridheight, anchor, fill, ipadx, ipady;
double weightx, weighty;
Insets inset;
GridBagLayout gridbag = new GridBagLayout();
contentPane.setLayout(gridbag);
gridx = 0; // 第0行
gridy = 0; // 第0列
gridwidth = 2; // 占两单位宽度
gridheight = 1; // 占一单位高度
weightx = 0;
weighty = 0;
anchor = GridBagConstraints.CENTER;
fill = GridBagConstraints.BOTH;
inset = new Insets(0, 0, 0, 0);
ipadx = 0;
ipady = 0;
c = new GridBagConstraints(gridx, gridy, gridwidth, gridheight,
weightx, weighty, anchor, fill, inset, ipadx, ipady);
gridbag.setConstraints(panel1, c);
contentPane.add(panel1);
gridx = 0;
gridy = 1;
c = new GridBagConstraints(gridx, gridy, gridwidth, gridheight,
weightx, weighty, anchor, fill, inset, ipadx, ipady);
gridbag.setConstraints(panel2, c);
contentPane.add(panel2);
gridx = 2;
gridy = 0;
gridwidth = 1; // 占一单位宽度
gridheight = 2; // 占两单位高度
c = new GridBagConstraints(gridx, gridy, gridwidth, gridheight,
weightx, weighty, anchor, fill, inset, ipadx, ipady);
gridbag.setConstraints(panel3, c);
contentPane.add(panel3);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new SliderDemo2();
}
public void stateChanged(ChangeEvent e) {
if ((JSlider) e.getSource() == slider1)
label1.setText("目前刻度:" + slider1.getValue());
if ((JSlider) e.getSource() == slider2)
label2.setText("目前刻度:" + slider2.getValue());
if ((JSlider) e.getSource() == slider3)
label3.setText("目前刻度:" + slider3.getValue());
}
}