使用微调器选择时间并面对以下问题,
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,但无论如何我可以编辑值吗?
答案 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);
}
}