SpinnerDateModel(Date,Comparable,Comparable,int step)
step设置无效,
默认为"Calendar.DAY_OF_MONTH"
我不管设为什么,在JSpinner里面点击向上或向下键,它一律都是按年增加(或者减少)1
但我打印出SpinnerDateModel.getCalendarField()的值又是正确的,为什么不能控制JSpinner呢

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import java.util.*;
    import javax.swing.*;/**
    A program to test spinners.
    */
    public class SpinnerTest
    {
    public static void main(String[] args)
    {
    SpinnerFrame frame=new SpinnerFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    }/**
    A frame with a panel that contains several spinners and a button that displays the spinner values.
    */
    class SpinnerFrame extends JFrame
    {
    public SpinnerFrame()
    {
    setTitle("SpinnerFrame");
    setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); Container contentPane=getContentPane(); JPanel buttonPanel=new JPanel();
    okButton=new JButton("Ok");
    buttonPanel.add(okButton); contentPane.add(buttonPanel,BorderLayout.SOUTH); mainPanel=new JPanel();
    mainPanel.setLayout(new GridLayout(0,3)); contentPane.add(mainPanel,BorderLayout.CENTER); //问题:以下这条语句中的Calendar.SECOND没有起到作用,步长仍然为YEAR,但用getCalenderField方法得到的值又是Calendar.SECOND;
    //或者改为其它任何CalendarField值也不行,都不能使点击箭头按钮 增加、减少 的量改为相对应的值
    JSpinner betterDateSpinner=new JSpinner(new SpinnerDateModel());
    SpinnerDateModel spinnerDateModel=(SpinnerDateModel)betterDateSpinner.getModel();
    spinnerDateModel.setCalendarField(Calendar.SECOND);
    String pattern=((SimpleDateFormat)DateFormat.getDateTimeInstance()).toPattern();
    betterDateSpinner.setEditor(new JSpinner.DateEditor(betterDateSpinner,pattern));
    System.out.println("betterDateSpinner getModel: "+betterDateSpinner.getModel());
    System.out.println("spinnerDateModel getCalendarField: "+spinnerDateModel.getCalendarField());
    addRow("Better Date",betterDateSpinner);
    } /**
    Adds a row to te main panel.
    @param labelText the label of the spinner
    @param spinner the sample spinner
    */
    public void addRow(String labelText,final JSpinner spinner)
    {
    mainPanel.add(new JLabel(labelText));
    mainPanel.add(spinner); final JLabel valueLabel=new JLabel();
    mainPanel.add(valueLabel); okButton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    Object value=spinner.getValue();
    valueLabel.setText(value.toString());
    }
    });
    } private static final int DEFAULT_WIDTH=600;
    private static final int DEFAULT_HEIGHT=100; private JPanel mainPanel;
    private JButton okButton;
    }