五分之二点五 2021-11-25 14:18 采纳率: 0%
浏览 32
已结题

关于java中的gui的repaint方法

问题遇到的现象和发生背景

我想在一个jframe里添加一个标签,用来显示当前的系统时间,包括一个整点报时的功能,但是在时间框框里一直都没有显示时间。

运行结果及报错内容

时间框里一直没有显示时间,

我的解答思路和尝试过的方法

我在thread类里边又增加了一个变量flag用来存储系统时间,然后把flag传给容器里的标签settext,进行repaint后并没有成功

我想要达到的结果

我想要在显示时间的框里可以吧当前系统的时间动态显示出来。期待大家的指点。

package 秒表案例;

import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Font;
import javax.swing.JLabel;

public class EX extends JFrame {

     static JPanel contentPane;

    public static void main(String[] args) {
        
        EX a=new EX();
        a.setVisible(true);
        
        //thread thread =new thread();
        //Thread t=new Thread(thread,"线程一");
        //t.start();
        
        while(true) {
            //判断是否是整点
            Date n=new Date();
            SimpleDateFormat sbf1=new SimpleDateFormat("mm");
            String time=sbf1.format(n);
            if(!time.equals("00")) {
                EX2 d=new EX2();
                d.setVisible(true);
                try {
                    Thread.sleep(3000);
                    d.dispose();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
                    
            //主线程休眠一秒
            Thread a1=new Thread();
            try {
                a1.currentThread().sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    /**
     * Create the frame.
     */
    public EX() {
        setTitle("时间");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 386, 177);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        thread thread =new thread();
        Thread t=new Thread(thread,"线程一");
        t.start();
        
        
        JLabel lblNewLabel = new JLabel(thread.flag);
        EX.contentPane.repaint();
        lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 40));
        lblNewLabel.setBounds(0, 0, 362, 130);
        contentPane.add(lblNewLabel);
        
    }
}

class thread implements Runnable{
     static String flag=null;
    public void run() {
        while(true) {

            //获取当前的系统时间
            Date d=new Date();
            SimpleDateFormat sbf=new SimpleDateFormat("hh:mm:ss");
            flag=sbf.format(d);
            //System.out.println(flag);
            System.out.println(sbf.format(d));
            
            EX.contentPane.getComponent(0).setName(flag);
            System.out.println(EX.contentPane.getComponent(0).getName());
            
            EX.contentPane.validate();
            EX.contentPane.repaint();
            
            //线程休眠一秒
            Thread m=new Thread();
            try {
                m.currentThread().sleep(1000);
                
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        
    }
}


package 秒表案例;

import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;

public class EX2 extends JFrame {

    private JPanel contentPane;


    public EX2() {
        setBounds(100, 100, 389, 196);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(null);
        
        Date d=new Date();
        SimpleDateFormat sbf=new SimpleDateFormat("hh");
        //System.out.println(sbf.format(d));
        
        JLabel lblNewLabel = new JLabel("现在是"+sbf.format(d)+"点整");
        lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 40));
        lblNewLabel.setBounds(10, 10, 345, 129);
        panel.add(lblNewLabel);
        
        
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月3日
    • 创建了问题 11月25日

    悬赏问题

    • ¥20 公众号如何实现点击超链接后自动发送文字
    • ¥15 用php隐藏类名和增加类名
    • ¥15 算法设计与分析课程的提问
    • ¥20 汇川小型plc控制小米微电机
    • ¥15 用MATLAB汇总拟合图
    • ¥15 智能除草机器人方案设计
    • ¥15 对接wps协作接口实现消息发送
    • ¥15 SQLite 出现“Database is locked” 如何解决?
    • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
    • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题