gpt4 book ai didi

java - 当 JSpinner 获得焦点时如何选择 JSpinner 日期字段

转载 作者:行者123 更新时间:2023-12-01 23:49:46 26 4
gpt4 key购买 nike

我正在尝试让 JSpinner(包含分/秒计时器)为一群按自己的方式工作的人工作,他们不关心鼠标,但希望每次击键都能准确地完成他们的任务习惯了。它几乎按照我想要的方式工作,但最后一英里是最难的。

这在实践中意味着,当微调器的其中一个文本字段获得焦点时,微调器的外观和行为应该与用户从其中一个字段按下箭头键后的外观和行为完全相同。

Spinner 创建如下:

this.countdown = new JSpinner(this.model);
this.editor = new JSpinner.DateEditor(countdown, "m:ss");
JFormattedTextField textField = editor.getTextField();

第 1 步。当我的微调器出现时,它看起来像这样:(“|”表示插入符号,粗体表示选择)

|1:00
(未选择任何内容)

第 2 步。如果从此处按下向上箭头它看起来像这样:

2|:00
(选择 2 分钟字段)

第 3 步。如果从这里按下右箭头,我们会得到:

2:|00
(未选择任何内容)

第 4 步。如果从这里按下向上箭头,我们会得到

2:01|
(选择秒字段中的 01)

我希望它能够像步骤 2 和 4 中那样适用于所有这些情况。当其中一个子字段获得焦点时,应选择它。

有什么办法可以实现这一点吗?

最佳答案

也许你可以使用 FocusListener。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class SpinnerFocusTest {
private static final String PATTERN = "m:ss";
public JComponent makeUI() {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(60*1000);
Date value = c.getTime();

SpinnerDateModel m = new SpinnerDateModel(
value, null, null, Calendar.MINUTE);

JSpinner sp1 = new JSpinner(m);
sp1.setEditor(new JSpinner.DateEditor(sp1, PATTERN));

JSpinner sp2 = new JSpinner(m);
final JSpinner.DateEditor editor =
new JSpinner.DateEditor(sp2, PATTERN);
sp2.setEditor(editor);
editor.getTextField().addFocusListener(new FocusAdapter() {
@Override public void focusGained(FocusEvent e) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
JTextField f = editor.getTextField();
int i = f.getText().lastIndexOf(":");
f.select(i+1, i+3);
}
});
}
});

JPanel p = new JPanel(new GridLayout(2,1,5,5));
p.add(sp1);
p.add(sp2);
JPanel panel = new JPanel(new BorderLayout());
panel.add(p, BorderLayout.NORTH);
panel.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));
return panel;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame("");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new SpinnerFocusTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

关于java - 当 JSpinner 获得焦点时如何选择 JSpinner 日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com