Java Swing JSlider

2018-01-09 19:23 更新

Java Swing教程 - Java Swing JSlider


JSlider允許我們通過沿著軌道滑動旋鈕從兩個整數(shù)之間的值列表中選擇一個值。

JSlider有四個重要的屬性:

  • an orientation
  • a minimum value
  • a maximum value
  • a current value

方向確定是水平還是垂直顯示。我們可以使用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);
  }
}

拇指圖標(biāo)

下面的代碼顯示了如何為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);
  }
}

拇指圖標(biāo)...

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);
  }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號