JSpinner 是 javax.swing 包的一部分。它包含一个单行输入框,该输入框可能是一个数字,或者是来自有序序列的一个对象。用户可以直接在微调器的文本字段中手动输入合法数据。微调器有时更受青睐,因为它们不需要下拉列表。微调器包含一个向上箭头和一个向下箭头,按下时会显示上一个和下一个元素。
JSpinner 的构造函数如下:
- JSpinner(): 创建一个空的微调器,其初始值设置为零,且没有约束。
- JSpinner( SpinnerModel model): 创建一个微调器,并将作为参数传递的指定微调模型(SpinnerModel)设置给该微调器。
常用方法包括:
- SpinnerListModel(List l): 使用列表 l 的元素创建一个微调模型。该微调模型可用于设置为微调器的模型。
- SpinnerNumberModel(int value, int max, int min, int step): 返回一个微调模型,其初始值设置为 value,并具有最小值、最大值以及确定的步长值。
- setValue(Object v): 将微调器的值设置为作为参数传递的对象。
- getValue(): 返回微调器的当前值。
- getPreviousValue(): 返回微调器的上一个值。
- getNextValue(): 返回微调器的下一个值。
1. 创建一个简单 JSpinner 的程序
// Java Program to create a
// simple JSpinner
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
class spinner extends JFrame {
// frame
static JFrame f;
// default constructor
spinner()
{
}
// main class
public static void main(String[] args)
{
// create a new frame
f = new JFrame("spinner");
// create a JSpinner
JSpinner s = new JSpinner();
// set Bounds for spinner
s.setBounds(70, 70, 50, 40);
// set layout for frame
f.setLayout(null);
// add panel to frame
f.add(s);
// set frame size
f.setSize(300, 300);
f.show();
}
}
输出:
2. 创建一个 JSpinner 并为其添加 ChangeListener 的程序;使用 JSpinner 选择出生日期的程序。
// Java program to select your
// date of birth using JSpinner
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
class spinner1 extends JFrame implements ChangeListener {
// frame
static JFrame f;
// label
static JLabel l, l1;
// spinner
static JSpinner s, s1, s2;
// default constructor
spinner1()
{
}
// main class
public static void main(String[] args)
{
// create an object of the class
spinner1 sp1 = new spinner1();
// create a new frame
f = new JFrame("spinner");
// create a label
l = new JLabel("select your date of birth");
l1 = new JLabel("1 January 2000");
// create a JSpinner with a minimum, maximum and step value
s = new JSpinner();
s1 = new JSpinner(new SpinnerNumberModel(1, 1, 31, 1));
// setvalue of year
s.setValue(2000);
// store the months
String months[] = { "January", "February", "March",
"April", "May", "June", "July", "August",
"September", "October", "Novemeber", "December" };
// create a JSpinner with list values
s2 = new JSpinner(new SpinnerListModel(months));
// add change listener to spinner
s.addChangeListener(sp1);
s1.addChangeListener(sp1);
s2.addChangeListener(sp1);
// set Bounds for spinner
s.setBounds(70, 70, 50, 40);
s1.setBounds(70, 130, 50, 40);
s2.setBounds(70, 200, 90, 40);
// setbounds for label
l.setBounds(10, 10, 150, 20);
l1.setBounds(10, 300, 150, 20);
// set layout for frame
f.setLayout(null);
// add label
f.add(l);
f.add(l1);
f.add(s);
f.add(s1);
f.add(s2);
// add panel to frame
f.add(s);
// set frame size
f.setSize(400, 400);
f.show();
}
// if the state is changed
public void stateChanged(ChangeEvent e)
{
l1.setText(s1.getValue() + " " + s2.getValue() + " " + s.getValue());
}
}
输出:
注意:此程序无法在在线编译器中运行,请使用离线 IDE。