如何存储在 Java 中执行事件后发生变化的变量的最终值

如何解决如何存储在 Java 中执行事件后发生变化的变量的最终值

我正在使用 Swing 和 AWT 组件开发 Java 睡眠周期计算器应用程序,但我被困在这里

我使用整数变量 a 和 b 来存储用户在滚动条上设置的时间的“小时”和“分钟”值,稍后我将使用它们进行一些计算并显示一些数据。

但是 a 和 b 的值会自动设置为 0,并且无需等待滚动条上的调整事件执行即可进行计算。

如何在事件执行后更新 a 和 b 的值,然后将它们用于我的计算?

this is where I'm setting the time a=23 and b=41

but the calculations are performed with values a=0 and b=0

这是代码

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

class Sleep {
    JFrame f;
    JButton b1;
    JLabel l3;
    JLabel l4;
    JLabel l5;
    JLabel l6;
    JButton b2;
    JLabel l7;
    JButton b3;
    int a,b;
    Sleep() {
        f=new JFrame();

        JPanel p2=new JPanel();
        l3=new JLabel();
        l3.setText("***************** RAZHA'S SLEEP CYCLE CALculaTOR *****************");
        l4=new JLabel();
        l4.setText("Tired of waking up exhausted ???");
        l5=new JLabel("This Application calculates sleep cycles and finds the best time to wake up");
        l6=new JLabel("Waking you up at the most perfect time,feeling rested!");
        p2.add(l3); p2.add(l4); p2.add(l5); p2.add(l6);
        p2.setBounds(700,100,500,100);

        b1=new JButton("I WANT TO SLEEP AT");
        b1.setBounds(800,350,300,150);


        JPanel p1=new JPanel();
        JLabel l1=new JLabel("Select Time (HH-MM)");
                final JLabel label1 = new JLabel();          
            label1.setHorizontalAlignment(JLabel.CENTER);    
            label1.setSize(400,100);  
        final JLabel label2 = new JLabel();          
            label2.setHorizontalAlignment(JLabel.CENTER);    
            label2.setSize(400,100);  
            final JScrollBar hour=new JScrollBar(JScrollBar.VERTICAL,2,23);  
            final JScrollBar min=new JScrollBar(JScrollBar.VERTICAL,59);  
        hour.addAdjustmentListener(new AdjustmentListener() {  
                public void adjustmentValueChanged(AdjustmentEvent e) {  
                final int c=hour.getValue();
                    label1.setText("Hours : "+ c); 
                System.out.println("hr "+c);
                a=c;
                }
        });
        min.addAdjustmentListener(new AdjustmentListener() {  
                public void adjustmentValueChanged(AdjustmentEvent e) {  
                final int d=min.getValue();
                    label2.setText("Minutes : "+ d);
                System.out.println("min "+d);
                b=d;
                }
        }); 
        p1.add(l1); p1.add(hour); p1.add(min); p1.add(label1); p1.add(label2);
        p1.setBounds(780,550,340,80);


        l7=new JLabel("THE BEST TIMES TO WAKE UP ARE : ");
        DefaultListModel<String> lx = new DefaultListModel<>();  
            lx.addElement(((a+1)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 1 hr 44 min");  
            lx.addElement(((a+3)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 3 hrs 14 min");  
            lx.addElement(((a+4)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 4 hrs 44 min");  
            lx.addElement(((a+6)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 6 hrs 14 min");  
        lx.addElement(((a+7)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 7 hrs 44 min");
        lx.addElement(((a+9)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 9 hrs 14 min");
        lx.addElement(((a+10)+(b+44)/60)+":"+((b+44)%60)+"      -       "+"Nap for 10 hrs 44 min");
        lx.addElement(((a+12)+(b+14)/60)+":"+((b+14)%60)+"      -       "+"Nap for 12 hrs 14 min");
            JList<String> list = new JList<>(lx);  
        list.setFixedCellHeight(48);
            list.setFixedCellWidth(200);


        JPanel p3=new JPanel();
        p3.setBounds(800,420);
        p3.add(l7);
        p3.add(list);  
        p3.setVisible(false);

        b3=new JButton("EXIT");
        b3.setBounds(900,800,50);
        b3.setVisible(false);
        b3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    System.exit(0);
            } 
        });

        b2=new JButton("SUBMIT");
        b2.setBounds(900,650,50);
        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    b2.setVisible(false); 
                b1.setVisible(false); 
                p1.setVisible(false);
                p3.setVisible(true);
                b3.setVisible(true);
            } 
        });
        
        f.add(b1);
        f.add(b2);
        f.add(p1);
        f.add(p2);
        f.add(p3);
        f.add(b3);
        f.setSize(400,400);
        f.getContentPane().setBackground(Color.BLUE);
        f.setLayout(null);
        f.setVisible(true);
    }
    public static void main(String args[])
    {
        new Sleep();        
    }
}

请帮帮我。

解决方法

JList 组件使用 ListModel 初始化一次,该 ab 为零时创建。当 ab 的值稍后更改时,列表模型不会自动更改。当用户点击提交按钮 (JList) 时,需要使用新模型显式更新 b2 组件。

像这样:

Sleep() {
    // [...]

    l7=new JLabel("THE BEST TIMES TO WAKE UP ARE : ");
    JList<String> list = new JList<>();
    updateTimesListModel(list);
    list.setFixedCellHeight(48);
    list.setFixedCellWidth(200);

    // [...]

    b2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            updateTimesListModel(list);
            b2.setVisible(false);
            b1.setVisible(false);
            p1.setVisible(false);
            p3.setVisible(true);
            b3.setVisible(true);
        }
    });

    // [...]
}

private void updateTimesListModel(JList<String> list) {
    DefaultListModel<String> lx = new DefaultListModel<>();
    lx.addElement(((a+1)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 1 hr 44 min");
    lx.addElement(((a+3)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 3 hrs 14 min");
    lx.addElement(((a+4)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 4 hrs 44 min");
    lx.addElement(((a+6)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 6 hrs 14 min");
    lx.addElement(((a+7)+(b+44)/60)+":"+((b+44)%60)+"        -       "+"Nap for 7 hrs 44 min");
    lx.addElement(((a+9)+(b+14)/60)+":"+((b+14)%60)+"        -       "+"Nap for 9 hrs 14 min");
    lx.addElement(((a+10)+(b+44)/60)+":"+((b+44)%60)+"      -       "+"Nap for 10 hrs 44 min");
    lx.addElement(((a+12)+(b+14)/60)+":"+((b+14)%60)+"      -       "+"Nap for 12 hrs 14 min");
    list.setModel(lx);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?