我需要帮助,使用事件ChangeListener从JSpinner读取时间。 问题是当我一步旋转时,时间打印了两次。 当我在主程序中运行以下代码时,输出为00:00、01:00进行单次旋转。 您能否帮助我知道原因,以及如何解决在向上或向下旋转时仅打印一个值的问题?谢谢..请参阅示例
public class SpinnerTest {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SpinnerTest window = new SpinnerTest();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public SpinnerTest() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
JPanel groupLayoutPanel = new JPanel();
JSpinner spinner = new JSpinner(new SpinnerDateModel(new Date(1591563600775L), null, null, Calendar.HOUR_OF_DAY));
spinner.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSpinner spinner = (JSpinner)e.getSource();
Date sdate= (Date)spinner.getValue();
String pattern = "HH:mm";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(sdate);
System.out.println(date);
}
});
JSpinner.DateEditor de= new JSpinner.DateEditor(spinner,"HH:mm");
spinner.setEditor(de);
GroupLayout grouplayout= new GroupLayout(groupLayoutPanel);
grouplayout.setHorizontalGroup(
grouplayout.createParallelGroup(Alignment.LEADING)
.addGroup(grouplayout.createSequentialGroup()
.addGap(83)
.addComponent(spinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap(321, Short.MAX_VALUE))
);
grouplayout.setVerticalGroup(
grouplayout.createParallelGroup(Alignment.LEADING)
.addGroup(grouplayout.createSequentialGroup()
.addGap(25)
.addComponent(spinner, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap(216, Short.MAX_VALUE))
);
groupLayoutPanel.setLayout(grouplayout);
frame = new JFrame();
frame.setContentPane(groupLayoutPanel);
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}