JSpinner 给出旧值

2023-12-13

我在我的项目中使用了几个 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 ?


您可以维护一个“主日期”,将时间值重新合并回每个日期stateChanged event.

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            add(new DateSpinner(new Date()));
        }

    }

    public class DateSpinner extends JSpinner {

        private Date masterDate;

        public DateSpinner(Date date) {
            super(new SpinnerDateModel());
            this.masterDate = date;
            SpinnerDateModel model = (SpinnerDateModel) getModel();
            model.setCalendarField(Calendar.HOUR);
            setEditor(new JSpinner.DateEditor(this, "hh:mm"));
            JFormattedTextField tf = ((JSpinner.DefaultEditor) getEditor()).getTextField();
            DefaultFormatterFactory factory = (DefaultFormatterFactory) tf.getFormatterFactory();
            DateFormatter formatter = (DateFormatter) factory.getDefaultFormatter();

            formatter.setFormat(new SimpleDateFormat("hh:mm"));

            setValue(date);

            addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {

                    Calendar cal = Calendar.getInstance();
                    cal.setTime(masterDate);

                    Calendar time = Calendar.getInstance();
                    time.setTime((Date) getValue());

                    cal.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
                    cal.set(Calendar.MINUTE, time.get(Calendar.MINUTE));

                    masterDate = cal.getTime();

                    System.out.println(masterDate);

                }

            });
        }

        public String getTime() {
            return new SimpleDateFormat("hh:mm").format((Date)getValue());
        }

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSpinner 给出旧值 的相关文章

  • string.split("(?!^)") 解释

    我正在尝试将字符串的字符拆分为字符串数组 我找到了解决方案here https stackoverflow com questions 5235401 split string into array of character strings
  • Java中如何合并两个数组?

    它不是连接而是合并两个数组 使它们成为名称值对的数组 firstarray a aa aaa secondarray b bb bbb result a b aa bb aaa bbb 最好的方法是什么 in Java public sta
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • Java中的字节和字符转换

    如果我将一个字符转换为byte然后回到char 那个角色神秘地消失了 变成了别的东西 这怎么可能 这是代码 char a line 1 byte b byte a line 2 char c char b line 3 System out
  • 在 Spring Webflux 中执行阻塞 JDBC 调用

    我使用 Spring Webflux 和 Spring data jpa 使用 PostgreSql 作为后端数据库 我不想在进行数据库调用时阻塞主线程 例如find and save 为了实现同样的目标 我有一个主调度程序Controll
  • 使用 SSL 和代理设置的 Rest 客户端获取连接超时

    我正在使用带有忽略 ssl 的 Rest 客户端 它工作正常 但在将来我尝试使用客户端证书进行的生产中将无法工作 我有 ca 证书和客户端证书 我用它创建了一个客户端 但我收到错误 Exception in thread main com
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • SwingUtilities.invokeLater

    我的问题与SwingUtilities invokeLater 我应该什么时候使用它 每次需要更新 GUI 组件时都必须使用吗 它到底有什么作用 是否有替代方案 因为它听起来不直观并且添加了看似不必要的代码 Do I have to use
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • 为什么从类构造函数调用的方法应该是最终的? [复制]

    这个问题在这里已经有答案了 我是一名 Java 新手 我试图理解 Oracle 网站教程中的以下行 https docs oracle com javase tutorial java IandI final html https docs
  • Unix 纪元时间转 Java Date 对象

    我有一个包含以下内容的字符串UNIX 纪元时间 https en wikipedia org wiki Unix time 我需要将其转换为 Java Date 对象 String date 1081157732 DateFormat df
  • Java 执行器和长寿命线程

    我继承了一些使用 Executors newFixedThreadPool 4 的代码运行 4 个长寿命线程来完成应用程序的所有工作 这是推荐的吗 我读过Java 并发实践 https rads stackoverflow com amzn
  • 隐藏 JTable 临时列

    我正在使用 JTable 显示数据库中的数据 现在我想通过 Jcombobox 过滤我的 jtable 我正在使用 Jcombo 框 其中包含 030 024 045 等值 这些值已在 jtable 中设置为列标题 当我单击组合时 选定的列
  • 如果 @transactional 在类级别应用,如何拦截 @transactional 参数

    我想捕获 transactional 的参数 如果它应用于类级别 例如如果 transactional应用在方法级别 例如 class A transactional readOnly true public void someMethod
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa
  • RetentionPolicy CLASS 与 RUNTIME

    两者之间有什么实际区别RetentionPolicy CLASS and RetentionPolicy RUNTIME 看起来两者都被记录到字节码中 并且无论如何都可以在运行时访问 无论如何 两者都可以在运行时访问 那不是那个javado

随机推荐

  • 跨域请求和JQuery

    我尝试使用 getJSON 通过 jquery 向 Web 服务发出跨域请求 它工作正常 但是 当我尝试在 Internet Explorer 7 或 8 中发出相同的请求时 该请求永远不会发送 有人有主意吗 JSONP 就是为了这个目的而
  • 在 Perl 中如何找到所有重定向后的最终 URL?

    可以说我有 http www ritzcarlton com 这将我重定向到 http www ritzcarlton com en Default htm Perl 有没有办法在所有重定向后找到最终网址 使用 LWP 将为您遵循重定向 然
  • 在 JavaScript 中反转字符串

    我正在尝试反转输入字符串 var oneway document getElementById input field value var backway oneway reverse 但萤火虫告诉我oneway reverse 不是一个函
  • VS2015 中的 CoreCLR 控制台应用程序项目中没有本机代码调试?

    我真的很想跳过 CoreCLR 新的项目结构 nuget 合并到构建系统 文件系统报告更改时自动刷新解决方案以及针对多个平台只是我想从旧的 csproj net 继续前进的部分原因4 x 的东西 我的主要用例之一是使用 C 探索多平台游戏引
  • 如何将“字符串列表”变成真正的列表?

    我正在开一个 txt文件 并且必须使用其中的列表来执行我正在编写的函数 这是文本文件中给出的列表之一 24 72 95 100 59 80 87 n Using strip 它摆脱了 n 所以就变成 24 72 95 100 59 80 8
  • 递归 JSON 架构

    我正在尝试为带有子菜单的菜单创建正确的 JSON 架构 所以我应该从 item 定义一个数组 其中应包含三个项目 1 显示名称 2 URL 和子项 应该是具有相同结构的对象数组 此时我得到了这个 type array additionalP
  • main() 总是返回 int? [复制]

    这个问题在这里已经有答案了 可能的重复 C C 中 main 应该返回什么 为什么我们在c 中给出int main而不是void main 我开始学习 C 时 我想到了以下问题 main 总是返回 int 我不能声明无效主 代替int ma
  • 更改列表框中所选项目的背景颜色

    首先 我在这里和网络上搜索 发现很多解决方案如何更改 WPF 中列表框中所选项目的背景颜色 但没有找到如何在 Windows 应用商店应用程序中更改它 这个框架有点不同 我无法使用任何解决方案 我用这个 http social msdn m
  • Android:使用两个 ValueEventListener 从 firebase 数据库获取数据(在 Arraylist 过期之前设置适配器)

    我正在开发一个应用程序 数据库中有医生和患者等用户 患者数据和患者中可能有医生userIduserId在医生数据中 因为在应用程序中医生会看到有关他 她的患者的一些信息 我开发了这段代码 但在设置适配器之前我无法将患者信息添加到Arrayl
  • 使用增强几何从点到线的垂直地理距离

    我想得到距一点的垂直距离 t 到一条线段 p q 垂线不能与直线相交 p q 在这种情况下我想延长线路 p q 假设 然后绘制垂线以获得距离 p q t 都是 GPS 坐标 我正在使用增强几何 typedef boost geometry
  • 根据过去 90 天的登录情况计算活跃用户数

    我正在尝试进行一个查询 该查询将生成一个列表 显示我们每月有多少活跃用户 我们将活跃用户定义为过去 90 天内登录的用户 我可以通过这个轻松定义我们现在拥有的活跃用户数量 SELECT COUNT DISTINCT user id FROM
  • 检查对象 HashSet 的相等性

    我正在尝试比较两个哈希集Definition输入为EqualityComparer
  • Linux 中的 R 有哪些可用的 IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 Linux 中的 R 有哪些好的 IDE 我尝试过 Rcmdr 和 Eclipse 但似乎都不具有与 Windows 中的 Tinn R 相同的可用性 还有其他选择吗 这是一个新来者
  • IP 地址的正则表达式

    我尝试使用以下源代码提取 wan ip 的值 IP 地址 怎么了 我确信正则表达式模式是正确的 String input var product pic fn var firmware ver 20 02 024 var wan ip 92
  • Ruby 中相当于 Java 中的“this”函数的是什么?

    在Java中 有一个 this 函数指向它的方法 Ruby 中有类似的东西吗 例如 有没有 def method this method end 等价的是self 这也是隐含的 所以self first name是相同的first name
  • 离子无限滚动

    我使用 wordpress 作为应用程序的后端 我想使用无限滚动 但我在连接文章时遇到问题 我正在使用工厂调用该服务 factory Worlds function http var worlds storageKey worlds fun
  • API Application Insights 良好使用实践

    我读过这个文档 https learn microsoft com en us azure application insights app insights api custom events metrics 有许多不同的 API 方法来
  • Django 查询集返回 DurationField 值(以秒为单位)

    我有两个模型 Post Comment 评论与帖子有 FK 关系 现在我想返回所有帖子及其 响应时间 我得到的响应时间是timedelta格式 我可以在几秒钟内收到它吗 我试过ExtractSecond但这不是我要找的 base posts
  • 如果省略必需的 *pipeline* 参数,是否可以强制 PowerShell 脚本抛出异常?

    当省略必需参数时 交互式 PowerShell 会话会提示用户 Shay Levy 提供了一个解决方法对于这个问题 问题是当您使用管道绑定参数时 解决方法不起作用 考虑这个例子 function f CmdletBinding param
  • JSpinner 给出旧值

    我在我的项目中使用了几个 JSpinners 来显示小时和分钟 当 JSpinner 递增或递减时 我必须将值保存到数据库中 但问题是 JSpinners 给了我旧的价值观 例如 如果显示的时间是09 30我将时间增加到10 30 我得到