【发布时间】:2015-12-08 08:36:48
【问题描述】:
我有一个带有“HH:mm”格式的 SpinnerDateModel 的 JSpinner。我希望用户(例如)能够从表(或任何其他来源)复制“yyyy-MM-dd HH:mm:ss.SSS”中的日期并将其粘贴到 JSpinner - HH:mm仅部分。这样的完整日期字符串通常对组件无效,但我仍然想尝试粘贴的字符串并从中获取所需的信息(如果它在那里)...... 我认为我的验证方法应该如下所示,但我不知道如何更改 paste() 行为,以便我可以添加粘贴文本的验证和更改...
private String validateAndReturnCorrected(String pastedText) {
DateFormat hoursMinutesFormat = new SimpleDateFormat("HH:mm");
try {
// trying to paste a full date string?
DateFormat fullDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = fullDateFormat.parse(pastedText);
return hoursMinutesFormat.format(date);
} catch (ParseException ex) {
}
// trying to paste hour and minutes?
try {
Date date = hoursMinutesFormat.parse(pastedText);
return hoursMinutesFormat.format(date);
} catch (ParseException ex1) {
}
// trying to paste date in HH:mm:ss format?
try {
DateFormat hoursMinutesSecondsFormat = new SimpleDateFormat("HH:mm:ss");
Date date = hoursMinutesSecondsFormat.parse(pastedText);
return hoursMinutesSecondsFormat.format(date);
} catch (ParseException ex2) {
}
// trying to paste date in HH:mm:ss.SSS format?
try {
DateFormat hoursMinutesSecondsMilisecondsFormat = new SimpleDateFormat("HH:mm:ss.SSS");
Date date = hoursMinutesSecondsMilisecondsFormat.parse(pastedText);
return hoursMinutesFormat.format(date);
} catch (ParseException ex3) {
}
// unable to correct the string...
return "";
}
更新
更改谷歌搜索的问题,我发现以下两个网站让我解决了问题:
- http://www.javapractices.com/topic/TopicAction.do?Id=82
- https://stackoverflow.com/a/25276224/5653483
所以解决方案看起来像这样:
class ProxyAction extends TextAction implements ClipboardOwner {
private TextAction action;
public ProxyAction(TextAction action) {
super(action.toString());
this.action = action;
}
@Override
public void actionPerformed(ActionEvent e) {
String cbc=getClipboardContents();
setClipboardContents(validateAndReturnCorrected(cbc));
action.actionPerformed(e);
setClipboardContents(cbc);
System.out.println("Paste Occured...............................................................");
}
// here goes the validateAndReturnCorrected method
public String getClipboardContents() {
String result = "";
try {
result = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException | IOException ex) {
ex.printStackTrace();
}
return result;
}
public void setClipboardContents(String aString) {
StringSelection stringSelection = new StringSelection(aString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, this);
}
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
}
}
【问题讨论】:
-
这个问题可能对您有所帮助:stackoverflow.com/questions/3707485/… 是否可以让用户在文本字段中粘贴日期并让用户在需要时修改输入?
-
不,它应该尝试自动更正粘贴的字符串...我想我需要一种方法来覆盖我的 jSpinner 编辑器的 paste() 方法或类似的方法...您链接的问题涉及从字符串获取日期的问题,但我认为我在发布的验证方法中做得很好。