JSlider允許我們通過沿著軌道滑動旋鈕從兩個整數(shù)之間的值列表中選擇一個值。
JSlider有四個重要的屬性:
方向確定是水平還是垂直顯示。我們可以使用SwingConstants.VERTICAL和SwingConstants.HORIZONTAL值來定向它。
以下代碼創(chuàng)建一個水平JSlider,最小值為0,最大值為10,當(dāng)前值設(shè)置為5:
JSlider points = new JSlider(0, 10, 5);
要獲取JSlider的當(dāng)前值,請使用其getValue()方法。要設(shè)置當(dāng)前值,請使用其setValue(int value)方法。
要在JSlider上顯示次要和主要刻度,設(shè)置需要顯示這些tick的間隔,并調(diào)用其方法來啟用刻畫畫,如下面的代碼。
points.setMinorTickSpacing(1); points.setMajorTickSpacing(2); points.setPaintTicks(true);
在JSlider中顯示標(biāo)準(zhǔn)標(biāo)簽或顯示沿軌道值的自定義標(biāo)簽。
標(biāo)準(zhǔn)標(biāo)簽將顯示沿軌道的整數(shù)值,我們可以調(diào)用其setPaintLabels(true)方法在主刻度間距顯示整數(shù)值。
JSlider也支持自定義標(biāo)簽。 JSlider上的標(biāo)簽使用JLabel組件顯示。 我們需要創(chuàng)建一個帶有值標(biāo)簽對的Hashtable,并使用它的setLabelTable()方法設(shè)置標(biāo)簽。
以下代碼將值0設(shè)置為標(biāo)簽“差",值5設(shè)置為“平均值",值10設(shè)置為“極好"。
設(shè)置標(biāo)簽表不會顯示標(biāo)簽。 我們必須調(diào)用setPaintLabels(true)方法來顯示它們。
Hashtable labelTable = new Hashtable(); labelTable.put(new Integer(0), new JLabel("Poor")); labelTable.put(new Integer(5), new JLabel("Average")); labelTable.put(new Integer(10), new JLabel("Excellent")); // Set the labels for the JSlider and make them visible points.setLabelTable(labelTable); points.setPaintLabels(true);
import java.awt.Dimension; /*from w ww . ja v a 2 s .c o m*/ import javax.swing.JFrame; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class Main { public static void main(String[] args) { JFrame f = new JFrame(); final JSlider slider = new JSlider(0, 150, 0); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); slider.setPreferredSize(new Dimension(150, 30)); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent event) { int value = slider.getValue(); if (value == 0) { System.out.println("0"); } else if (value > 0 && value <= 30) { System.out.println("value > 0 && value <= 30"); } else if (value > 30 && value < 80) { System.out.println("value > 30 && value < 80"); } else { System.out.println("max"); } } }); f.add(slider); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } }
以下代碼顯示如何設(shè)置tick的距離和樣式。
import java.awt.BorderLayout; //from w w w. j a va 2 s . co m import javax.swing.BoundedRangeModel; import javax.swing.JFrame; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class Main { public static void main(String args[]) { JFrame frame = new JFrame("Tick Slider"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JSlider jSliderOne = new JSlider(); // Major Tick 25 - Minor 5 jSliderOne.setMinorTickSpacing(5); jSliderOne.setMajorTickSpacing(25); jSliderOne.setPaintTicks(true); jSliderOne.setSnapToTicks(true); frame.add(jSliderOne, BorderLayout.NORTH); frame.setSize(300, 200); frame.setVisible(true); } }
下面的代碼顯示了如何標(biāo)簽JSlider位置:使用文本標(biāo)記JSlider。
import java.awt.BorderLayout; import java.util.Hashtable; /*from ww w . j a v a2 s .co m*/ import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JSlider; public class Main { public static void main(String args[]) { JFrame frame = new JFrame("Tick Slider"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JSlider jSliderOne = new JSlider(); jSliderOne.setPaintLabels(true); Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>(); table.put (0, new JLabel(new ImageIcon("yourFile.gif"))); table.put (10, new JLabel("Ten")); table.put (25, new JLabel("Twenty-Five")); table.put (34, new JLabel("Thirty-Four")); table.put (52, new JLabel("Fifty-Two")); table.put (70, new JLabel("Seventy")); table.put (82, new JLabel("Eighty-Two")); jSliderOne.setLabelTable (table); frame.add(jSliderOne, BorderLayout.NORTH); frame.setSize(300, 200); frame.setVisible(true); } }
下面的代碼顯示了如何為JSlider設(shè)置ThumbIcon。
import java.awt.BorderLayout; /*from w w w . j a v a 2 s . co m*/ import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JSlider; import javax.swing.UIDefaults; import javax.swing.UIManager; public class Main { public static void main(String args[]) { JFrame frame = new JFrame("Tick Slider"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // No Ticks JSlider jSliderOne = new JSlider(); Icon icon = new ImageIcon("yourFile.gif"); UIDefaults defaults = UIManager.getDefaults(); defaults.put("Slider.horizontalThumbIcon", icon); frame.add(jSliderOne, BorderLayout.NORTH); frame.setSize(300, 200); frame.setVisible(true); } }
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; /* w w w .ja v a2 s .com*/ import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class Main { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel main = new JPanel(new GridLayout(2, 1)); JPanel scrollBarPanel = new JPanel(); final JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 48, 0, 255); int height = scrollBar.getPreferredSize().height; scrollBar.setPreferredSize(new Dimension(175, height)); scrollBarPanel.add(scrollBar); main.add(scrollBarPanel); JPanel sliderPanel = new JPanel(); final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 255, 128); slider.setMajorTickSpacing(48); slider.setMinorTickSpacing(16); slider.setPaintTicks(true); sliderPanel.add(slider); main.add(sliderPanel); frame.add(main, BorderLayout.CENTER); scrollBar.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { System.out.println("JScrollBar"s current value = " + scrollBar.getValue()); } }); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { System.out.println("JSlider"s current value = " + slider.getValue()); } }); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
更多建議: