当前位置: 首页 > 面试题库 >

JSpinner赋予旧价值观

薛烨
2023-03-14
问题内容

我在项目中使用了几个JSpinners,它们显示小时和分钟。当JSpinner递增或递减时,我必须将值保存到数据库。但是问题是JSpinners给了我旧的价值观。例如-
如果显示的时间是,09:30并且我将时间增加到10:30,我将获得09:30作为返回值。我正在使用以下代码

更新的SSCCE

package spinnerupdation;

import java.awt.Container;
import java.awt.FlowLayout;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.DateFormatter;
import javax.swing.text.DefaultFormatterFactory;

/**
 *
 * @author Rohan Kandwal
 */
public class SpinnerUpdation extends JFrame{
 public JSpinner spinner;
    SpinnerUpdation(){
        Container pane=this.getContentPane();
        JPanel panel=new JPanel();
        panel.setLayout(new FlowLayout());
        SpinnerDateModel model=new SpinnerDateModel();
        model.setCalendarField(Calendar.HOUR);
        spinner=new JSpinner();
        spinner.setModel(model);
        spinner.setEditor(new JSpinner.DateEditor(spinner,"hh:mm"));
        panel.add(spinner);
        pane.add(panel);
        spinner.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                        JFormattedTextField tf = ((JSpinner.DefaultEditor) spinner.getEditor()).getTextField();
                        DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
                        DateFormatter formatter = (DateFormatter) factory.getDefaultFormatter();

                        // Change the date format to only show the hours
                        formatter.setFormat(new SimpleDateFormat("hh:mm"));
                        //formatter.setCommitsOnValidEdit(true);

                System.out.println(spinner.getValue());
                //System.out.println(tf.getText());
            }
        });


            }
    public static void main(String[] args) {
        SpinnerUpdation ss=new SpinnerUpdation();

        ss.setDefaultCloseOperation(ss.EXIT_ON_CLOSE);
        ss.setSize(574, 445);
     //ss.pack();

     ss.setLocationRelativeTo(null);
     ss.setResizable(false);
     ss.setVisible(true);
    }
}

如果我使用的tf.getText()是旧值两次,但是如果我使用的spinner.getValue是新值,但它是长格式

Thu Jan 01 10:18:00 IST 1970
Thu Jan 01 11:18:00 IST 1970

我应该如何设置微调框仅给11:18


问题答案:

Java
swing使用MVC模式,因此在JSpinner中相同。如果查看JSpinner源代码,您会发现getValue()方法实际上是调用getModel()。getValue(),因此它正在调用模型的getValue。并且您使用的模型是SpinnerDateModel,其值将为Date
Object,当您打印Date对象时,如果要获取,它将显示默认格式,例如“ Thu Jan 01 11:18:00 IST 1970”例如“
11:18”,则需要自行格式化。

 SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
 System.out.println(sdf.format(spinner.getValue()) );

您可能想知道为什么tf.getText()仅获得旧值,因为在微调器上发生ChangeEvent之后,将在tf上发生PropertyChangeEvent,将为其设置新值。当然,您可以像tf.addPropertyChangeListener一样收听tf。但我建议使用上面的解决方案。



 类似资料:
  • 功能说明 身份赋予API可以在客户在直播时,指定观众以特定身份观看直播,如将自身平台的观众身份传递到直播页面,让观众获得无缝的体验。 特别说明:如果您选用了此API,那么微信打赏,付费观看等涉及微信的功能将暂不可用 身份赋予逻辑图 接口说明 请求header GET http://{your-domain}/activity.php?a=userAssign 注:请将 {your-domain}

  • 第三方身份赋予功能模块 自定义授权,用户将频道改为自定义授权模式,并设定好自定义地址,访客进入观看页后会先跳转到自定义网址,完成身份赋予后再跳转回来 第三方身份赋予密钥,用户在“媒体中心 ——> 基础配置”栏生成密钥后,用以给传输的数据加密 身份赋予接口,用户调用接口传输密文,完成身份赋予 用户得到带有识别码的Cookie,并跳转到指定网址 第三方身份赋予接口 GET /hubuser/api/a

  • 我得到了下面的Navbar。我想让它做的是: 向下滚动时出现 再次向上滚动时离开视图(到定义的数量) 用箭头“关闭”导航条,使其变小 在“关闭”后“重新打开”导航栏 在任何时候,我仍然希望navbar在滚动到顶部时隐藏。无论它是扩展还是压缩 这不起作用,因为我的切换navbar的代码将为设置内联值,这是类中需要的,以便在向上滚动时隐藏它 所以,除了我的代码有什么问题之外,真正的问题是: 有没有办法

  • 介绍 (Introduction) JSpinner类是一个组件,它允许用户使用输入字段从有序序列中选择数字或对象值。 Class 声明 (Class Declaration) 以下是javax.swing.JSpinner类的声明 - public class JSpinner extends JComponent implements Accessible 类构造函数 (C

  • 只要一个动画,就可以带来生命。不幸的是,当设计师创建图标、logo 和吉祥物的时候,他们交付的通常都是图片或静态的 SVG。所以,虽然 GitHub 的章鱼猫、Twitter 的小鸟以及其它许多 logo 类似于生灵,它们看上去实际上并不是活着的。 Vue 可以帮到你。因为 SVG 的本质是数据,我们只需要这些动物兴奋、思考或警戒的样例。然后 Vue 就可以辅助完成这几种状态之间的过渡动画,来制作

  • 问题内容: 在我的Hibernate应用程序中,我正在使用创建ValueObject类 在我的服务课上,我这样写 在我的DAO课上,我这样写 现在我打电话给createOrUpdateUser(userVO)但它给错误 实际上我的数据库我已经为表创建了一个数据库,以为列生成唯一的ID 是它们的触发器问题。请建议我。 问题答案: ID列不能为null,无论您在数据库驱动程序中执行什么操作,都只会在插