java - JLabel setText() 方法不起作用

标签 java swing jlabel settext

此代码应创建一个框架,其中包含一个打印出时钟的标签。 zeitLaeuft() 方法使时钟工作,并且通过按钮“start”,时钟开始运行。当我调用方法 zeitLaeuft() 时,代码失败。我尝试了一些方法,现在我知道这是由于标签 jLUhr 造成的。在方法 zeitLaeuft() 中,调用方法 jLUhr.setText() 的两个命令失败。我尝试设置标签文本并注释掉该方法,但它不起作用。

问题是什么?

package uhr;

import javax.swing.*;
import javax.swing.JLabel;

import java.awt.Font;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.util.concurrent.TimeUnit;

public class Uhr1 extends javax.swing.JFrame {

    public Uhr1() {
        super();
        initGUI();
    }

    private static JLabel jLUhr;
    private static JButton jBtnStart;
    private static int stunden = 0, minuten = 0;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Uhr1 uhr = new Uhr1();
                uhr.setVisible(true);
                uhr.setLocationRelativeTo(null);
            }
        });

    }

    public void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            this.setTitle("Uhr");
            getContentPane().setLayout(null);

            {
                JLabel jLUhr = new JLabel(); //Uhr = clock in german
                add(jLUhr);
                jLUhr.setBounds(49, 89, 300, 100);
                jLUhr.setHorizontalAlignment(SwingConstants.CENTER);
                jLUhr.setVerticalAlignment(SwingConstants.CENTER);

            }

            {
                JButton jBtnStart = new JButton();
                add(jBtnStart);
                jBtnStart.setBounds(49, 219, 80, 30);
                jBtnStart.setText("Start");
                jBtnStart.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {
                        start(evt);
                    }
                });
            }

            pack();
            setSize(400,300);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static void zeitLaeuft() {

        while(true) {

                if(minuten < 60) {
                    int i;

                    try {
                        for(i = 0; i < 60; i++){
                        jLUhr.setText(Integer.toString(stunden) + " : " + Integer.toString(minuten));   //this is where the code fails
                        TimeUnit.SECONDS.sleep(1);
                        jLUhr.setText(Integer.toString(stunden) + "  " + Integer.toString(minuten));   //this is where the code fails
                        }
                        minuten++;
                        i = 0;
                    } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                else if(minuten == 60) {
                    minuten = 0;
                    if(stunden < 24) {  
                        stunden ++;
                        }
                    else {
                        stunden = 0;
                    }
                }
            }
    }

    public void start(ActionEvent evt) {
        zeitLaeuft(); //this is where the code fails
    }

}

最佳答案

这个:

JLabel jLUhr = new JLabel(); //Uhr = clock in german

...声明 & 创建一个局部变量,其作用域在方法结束时丢失。应该是:

jLUhr = new JLabel(); //Uhr = clock in german

这是访问全局变量。

关于java - JLabel setText() 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020683/

相关文章:

Java - 如何避免用未修饰的或自定义的 LookAndFeel 窗口覆盖任务栏?

java - 带图像的 JCheckBox

java - 将创建的 JLabels 索引到 2D Jlabel 数组中

netbeans - Jlabel 组件从我的 Netbeans 的调色板中消失了

java - Spring JPA java.util.Date 到日期值错误的 Mysql 时间戳

java - 调用数组并返回不同数组的方法会给出无法解析 B 到变量错误

java - 在 SwingWorker 上使用 done 方法还是更改监听器更好?

java - 如何在 Swing L&F 中查询当前的抗锯齿设置?

java - 在 try catch 中使用 Throwable 和 Exception 的区别

java - Android 中如何一键打开相机?