我在Java中有三个类似的类。它们保存三种不同形式的数据。
表单本身是这三个类的内部类,扩展了JPanel该类。它们具有标签,文本字段和按钮。这些组件添加到JPanel,我使用
addComponent()的方法,设置了GridBagConstraints为GridBagLayout。
对于所有三个类,此方法都是相同的。我只想在一个地方编写这种方法,但我想不出一种优雅的方法。
我考虑过的一种方法是使原始类的formData超类保存此方法。如果有人有更好的主意,我将不胜感激。我是Java的初学者,我极力尝试简化代码。
我有以下几行代码:
SpinnerDateModel spinMod=new SpinnerDateModel();
JSpinner spin=new JSpinner(spinMod);
//spin.setEditor(new JSpinner.DateEditor(spin,"dd.mm.yyyy"));
Run Code Online (Sandbox Code Playgroud)
当显示微调框时,我可以对其进行编辑,并在月份字段中输入我想要的任何两位数字。
如果单击JSpinner侧面,则只能增加和减少月份或日期的数字,以便它们的值合法。但是,如果我添加了最后注释过的行,那么这也不起作用。
问题是如何使JSpinner自定义格式仅接受合法日期。
另外,如果我ActionListener添加了一个获取日期的按钮,则可以通过将getValue()直接应用于来获得“正确的日期” JSpinner,但是如果我将日期编辑器的格式应用于该值,则会得到一个错误的日期(输入的日期)从中获得JSpinner。我希望动作监听器以我的自定义格式获取正确的值,并且我JSpinner只希望接受自定义格式的输入。那可能吗?
我的测试代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.text.*; //for the date format
public class TestDates{
JLabel jl=new JLabel("Date:");
JFrame jf=new JFrame("Test SpinnerDateFormat");
JButton jb=new JButton("Get Date");
SpinnerDateModel spinMod=new SpinnerDateModel();
JSpinner spin=new JSpinner(spinMod);
class jbHandler implements ActionListener{
public void actionPerformed(ActionEvent evt){
JSpinner.DateEditor de=(JSpinner.DateEditor)spin.getEditor();
String wrongDate=de.getFormat().format(spin.getValue());
Date okDate=(Date)spin.getValue();
System.out.println(">>>\n"+wrongDate+"\n"+okDate);
}
}
JPanel …Run Code Online (Sandbox Code Playgroud)