gpt4 book ai didi

java - 如何获取由 Swing 计时器每秒更新 3 次的 JFormattedTextField 的用户编辑值?

转载 作者:行者123 更新时间:2023-11-30 07:11:56 25 4
gpt4 key购买 nike

我有一个 JFormattedTextField 组件,它的 Integer 值在没有焦点时每秒更新 3 次。

我使用 Swing Timer 更新值。

我想让用户能够编辑它的值(以更新模型中的某些值),但我知道 JFormattedTextField 的值不会在每次失去焦点时都更新.所以在 lostFocus 事件中更改模型属性是不明智的,另一方面,当它失去焦点时,它的值可以由更新模块更改,这使情况变得更加困难。

很明显,我也不能使用 propertyListener,因为该值在一秒钟内更新 3 次!

现在我想知道我将如何更新变量以利用 JFormattedTextField 功能并让更新程序在我的 JFormattedTextField 没有焦点时更新它!有可能还是我必须改用 inputDialog ?怎么办?

例如,在下面的代码中,当我在 GUI 中将字段值更改为 200,然后单击 JFrame 使其失去焦点时,打印在控制台中的值不是 200。这是一个很好的随机值,之前是在该领域。

public class SwingTimerFormattedTextFieldTester {

public static void main(String... args){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 200);
final JFormattedTextField field = new JFormattedTextField(new Long(100));
field.setColumns(20);
frame.addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent e) {
frame.requestFocus();
e.consume();
}


});

frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(field);
frame.setVisible(true);

Timer timer = new Timer(330, new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if(!field.hasFocus()){
field.setValue(ThreadLocalRandom.current().nextLong());
}
}
});
timer.start();

field.addFocusListener(new FocusListener() {

@Override
public void focusGained(FocusEvent e) {
field.setBackground(Color.CYAN);
}

@Override
public void focusLost(FocusEvent e) {
field.setBackground(Color.WHITE);
System.out.println(String.valueOf((Long)field.getValue()));
}
});

frame.requestFocus();
}

}

最佳答案

如果您在失去焦点时提交对 JFormattedTextField 的编辑会怎样?

 @Override
public void focusLost(FocusEvent e) {
try {
if (field.isEditValid()) {
field.commitEdit();
}
} catch (ParseException e1) {
e1.printStackTrace();
}
field.setBackground(Color.WHITE);
System.out.println(String.valueOf((Long) field.getValue()));
}

关于java - 如何获取由 Swing 计时器每秒更新 3 次的 JFormattedTextField 的用户编辑值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734217/

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