- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 JSpinner,其 SpinnerDateModel 的格式为“HH:mm”。我希望用户(例如)能够从表(或任何其他源)复制“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 "";
}
<小时/>
更新
更改谷歌搜索问题后,我发现以下两个网站解决了问题:
所以解决方案看起来像这样:
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) {
}
}
最佳答案
I want the user to be (for example) able to copy a date in "yyyy-MM-dd HH:mm:ss.SSS" from a table (or any other source) and paste it into the JSpinner - the HH:mm part only.
这个简单的事情是在 JSpinners Xxx(Spinner)Model 中实现的。取决于 - SimpleDateFormat 是否添加到 JSpinner
输入验证(SpinnerEditor)只是一个JFormattedTextField默认情况下(有关详细信息,请阅读 JFormattedTextFields 配置和 InputVerifier)
例如(基础知识和标准,无需覆盖或设置特殊的东西),日期从 12 月 8 日更改为 12 月 10 日,时间从上午 10 点更改为上午 7 点。
。
.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.AbstractSpinnerModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
public class JSpinnerTest {
public static final int DEFAULT_WIDTH = 400;
public static final int DEFAULT_HEIGHT = 250;
private JFrame frame = new JFrame();
private JPanel mainPanel = new JPanel(new GridLayout(0, 3, 10, 10));
private JButton okButton = new JButton("Ok");
private JPanel buttonPanel = new JPanel();
public JSpinnerTest() {
buttonPanel.add(okButton);
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0, 3, 10, 10));
JSpinner defaultSpinner = new JSpinner();
addRow("Default", defaultSpinner);
JSpinner boundedSpinner = new JSpinner(new SpinnerNumberModel(5, 0, 10, 0.5));
addRow("Bounded", boundedSpinner);
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
JSpinner listSpinner = new JSpinner(new SpinnerListModel(fonts));
addRow("List", listSpinner);
JSpinner reverseListSpinner = new JSpinner(new SpinnerListModel(fonts) {
private static final long serialVersionUID = 1L;
@Override
public Object getNextValue() {
return super.getPreviousValue();
}
@Override
public Object getPreviousValue() {
return super.getNextValue();
}
});
addRow("Reverse List", reverseListSpinner);
JSpinner dateSpinner = new JSpinner(new SpinnerDateModel());
addRow("Date", dateSpinner);
JSpinner betterDateSpinner = new JSpinner(new SpinnerDateModel());
String pattern = ((SimpleDateFormat) DateFormat.getDateInstance()).toPattern();
betterDateSpinner.setEditor(new JSpinner.DateEditor(betterDateSpinner, pattern));
addRow("Better Date", betterDateSpinner);
JSpinner timeSpinner = new JSpinner(new SpinnerDateModel());
pattern = ((SimpleDateFormat) DateFormat.getTimeInstance(DateFormat.SHORT)).toPattern();
timeSpinner.setEditor(new JSpinner.DateEditor(timeSpinner, pattern));
addRow("Time", timeSpinner);
JSpinner permSpinner = new JSpinner(new PermutationSpinnerModel("meat"));
addRow("Word permutations", permSpinner);
frame.setTitle("SpinnerTest");
frame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.add(mainPanel, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private void addRow(String labelText, final JSpinner spinner) {
mainPanel.add(new JLabel(labelText));
mainPanel.add(spinner);
final JLabel valueLabel = new JLabel();
mainPanel.add(valueLabel);
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
Object value = spinner.getValue();
valueLabel.setText(value.toString());
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JSpinnerTest frame = new JSpinnerTest();
}
});
}
}
class PermutationSpinnerModel extends AbstractSpinnerModel {
private static final long serialVersionUID = 1L;
/**
* Constructs the model.
*
* @param w the word to permute
*/
public PermutationSpinnerModel(String w) {
word = w;
}
@Override
public Object getValue() {
return word;
}
@Override
public void setValue(Object value) {
if (!(value instanceof String)) {
throw new IllegalArgumentException();
}
word = (String) value;
fireStateChanged();
}
@Override
public Object getNextValue() {
int[] codePoints = toCodePointArray(word);
for (int i = codePoints.length - 1; i > 0; i--) {
if (codePoints[i - 1] < codePoints[i]) {
int j = codePoints.length - 1;
while (codePoints[i - 1] > codePoints[j]) {
j--;
}
swap(codePoints, i - 1, j);
reverse(codePoints, i, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
}
reverse(codePoints, 0, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
@Override
public Object getPreviousValue() {
int[] codePoints = toCodePointArray(word);
for (int i = codePoints.length - 1; i > 0; i--) {
if (codePoints[i - 1] > codePoints[i]) {
int j = codePoints.length - 1;
while (codePoints[i - 1] < codePoints[j]) {
j--;
}
swap(codePoints, i - 1, j);
reverse(codePoints, i, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
}
reverse(codePoints, 0, codePoints.length - 1);
return new String(codePoints, 0, codePoints.length);
}
private static int[] toCodePointArray(String str) {
int[] codePoints = new int[str.codePointCount(0, str.length())];
for (int i = 0, j = 0; i < str.length(); i++, j++) {
int cp = str.codePointAt(i);
if (Character.isSupplementaryCodePoint(cp)) {
i++;
}
codePoints[j] = cp;
}
return codePoints;
}
private static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static void reverse(int[] a, int i, int j) {
while (i < j) {
swap(a, i, j);
i++;
j--;
}
}
private String word;
}
关于java - 如何在将字符串粘贴到 JSpinner 之前验证和修改它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151284/
我正在遵循一个教程,老师通过以下方式将 html 粘贴到我们的 scrappy shell 中:%paste (下面的 html) html_doc = " " Title of hte page
例如 1.1.1.1 a.com 2.1.1.1 b.com 1.3.1.1 c.com 1.1.5.1 d.com 1.2.1.1 e.com 现在我想从另一个文本中替换这个 ip,不一样
是否有机会在 Angular 中实现粘贴按钮。 FE:用户复制网站的链接,当他或她点击按钮时,在我的页面上复制的链接应该出现在文本框中。 谢谢! 最佳答案 您只能以编程方式从网页复制。您不能以编程方式
我正在尝试提高 Vim 中粘贴功能的可用性,因为太多不同的删除操作(实际上我认为它们都是这样)也会拉到粘贴缓冲区。 这意味着我不再能够删除一些我想粘贴到某处的文本,清理一些东西,以及。然后 做我的粘贴
我正在构建一个简单的 Electron 应用程序,以在屏幕上的其他所有内容上显示一些文本。 有一个键盘快捷键可以打开带有文本的弹出窗口。 我想添加一个小功能。 最好的情况是:在计算机上的任意位置选择一
我有一个双击事件,我希望它保存特定范围的副本。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boo
我已经为这个烦人的问题苦苦挣扎了一段时间,但没有找到一个优雅的解决方案。 假设我有这样一个类层次结构: class StatWithBounds[A](val min: A, val max: A,
现在我有一个 Word 宏,可以通过将图像复制并粘贴到该位置来将图像移动到特定文本前面。这种方法效果很好,但成本很高。如果我的 Word 文档中有 1,000 张图像,则运行宏可能需要 30 分钟。
让我以我是自学成才的事实作为我的问题的开头,所以请提供尽可能详细的信息,如果我需要您以不同的方式或多次解释,请耐心等待。 我使用 Microsoft Visual Basic 7.0 为我的团队创建了
我已经为这个烦人的问题苦苦挣扎了一段时间,但没有找到一个优雅的解决方案。 假设我有这样一个类层次结构: class StatWithBounds[A](val min: A, val max: A,
我正在使用 Meteor 开发一个聊天应用程序,我不希望用户能够出于明显的垃圾邮件原因将内容复制/粘贴到表单中。这可能吗?这是我用来运行聊天应用程序的代码: Javascript: // render
我已经为此搜索了很多,但找不到任何建议...我提供了我自己的经典操作栏实现,所以我在所有 Activity 中声明粘贴/等..有谁知道如何做到这一点? 此外,我将提供我自己的复制/粘贴功能,并且仅在需
Windows 中 SWT Text 的默认上下文菜单有几个我们不想要的选项。由于操作系统提供的默认上下文菜单无法修改,因此我创建了一个自定义上下文菜单,其中只有基本的文本操作,例如文本框的删除、剪切
我最后的问题不是很清楚,我再试一次。 在我的 Tumblr 博客 (http://anti-standard.tumblr.com) 上,您可以看到一张图片(图片上写着“ANTI STANDARD”)
我必须编写一个脚本文件来剪切以下列并将其粘贴到新 .arff 文件中同一行的末尾。我想文件类型无关紧要。 当前文件: 63,male,typ_angina,145,233,t,left_vent_hy
是否可以发送过去的命令,以便将文本粘贴到当前聚焦的编辑文本中。场景: 后台服务监听通知(完成) 收到通知后,需要将文本复制到剪贴板(完成) 将文本粘贴到任何当前聚焦的字段,如果不可能则放弃粘贴命令。
我想用 PIL 粘贴一堆图片。出于某种原因,当我运行 blank.paste(img,(i*128,j*128)) 行时,出现以下错误:ValueError: cannot determine reg
如何在我的网页中禁用复制粘贴功能。准确地说,我不希望我的用户从我的网站上复制任何信息并将其用于个人目的。上一个关于同一主题的问题没有给出足够的解释。 onselect 和 ondrag 不起作用。请帮
废话不多说,直接上代码,小伙伴们仔细看下注释吧。 复制代码代码如下: /*简单的 复制 剪切 粘贴 功能 操作:
我应该在 vimrc 中添加哪一行以便在终端之间或不同文件/选项卡之间轻松复制/粘贴? 我现在有: " Better copy & paste set pastetoggle= set clipboa
我是一名优秀的程序员,十分优秀!