Jpinner setModel不允许更改值

时间:2014-01-17 07:02:04

标签: java swing jspinner

使用微调器选择时间并面对以下问题,

StarttimeSpinner = new JSpinner();
Date time = new SimpleDateFormat("HHmmss", Locale.ENGLISH).parse("000000");
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String dateString = formatter.format(time);
StarttimeSpinner.setModel(new SpinnerListModel(new String[]{dateString}));

此微调器位于JPanel中。当我打开面板时,我无法更改微调器中的值,它会自动重新分配给dateString值(00:00:00)。 我可以理解这是因为setModel,但无论如何我可以编辑值吗?

2 个答案:

答案 0 :(得分:1)

  

当我打开面板时,我无法在微调器中更改其值   自动重新分配到dateString值(00:00:00)。

问题是你正在尝试更改单个元素列表中的值:

StarttimeSpinner.setModel(new SpinnerListModel(new String[]{dateString}));

JSpinner旨在允许用户在其SpinnerModel定义的可能值列表中选择一个选项。如果新值根据模型有效,则可以编辑微调器值。因此,在这种情况下,您无法编辑对微调器模型有效的单个元素。

如果您的目标是使微调器成为时间选择器,那么请考虑使用SpinnerDateModel作为模型,并为微调器设置适当的编辑器(请参阅JSpinner.DateEditor类):

SpinnerDateModel model = new SpinnerDateModel();
JSpinner spinner = new JSpinner(model);
spinner.setEditor(new JSpinner.DateEditor(spinner, "HH:mm:ss"));

@MoritzPetersen和answer教程详见此How to Use Spinners

答案 1 :(得分:1)

试试这个例子:

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;

public class Main {
    public static void main(String args[]) {
        JFrame frame = new JFrame("Demo Frame/SuRu");
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new FlowLayout());
        frame.setBounds(200, 200, 500, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        SpinnerDateModel dateModel = new SpinnerDateModel();
        JSpinner jSpinner = new JSpinner(dateModel);
        jSpinner.setEditor(new JSpinner.DateEditor(jSpinner, "hh:mm:ss dd/MM/yyyy"));
        contentPane.add(new JLabel("Change Date: "));
        contentPane.add(jSpinner);
        frame.setVisible(true);
    }
}