【问题标题】:Jlabel Clock java swingJlabel 时钟 java swing
【发布时间】:2016-11-04 20:35:06
【问题描述】:

我正在制作一个显示所选国家/地区的时钟和时区的程序。 单击按钮时,时间将显示在 jLabel 中。 问题是,当我单击一次时,标签中会显示时间,但是当我单击第二次时,时间会被重写为现有的 jlabel 日期(文本)。

如何在不重写的情况下显示日期。 多点击,时间不可读。

这是我的代码:

public class Window extends JFrame {

    JLabel title, text,date1,label1;
    JTextField country;
    JButton search;

    private static final String DATE_FORMAT = "dd-M-yyyy hh:mm:ss a";

    public Window() {
        super("Genesys");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,470);
        setVisible(true);
        setLayout(null);

        //------Labels-------
        title = new JLabel ("Genesys Time");
        add (title);

        text = new JLabel("Continent/Country:");
        add(text);

        //--------TextFileds------
        country = new JTextField();
        add (country);

        //----------Buttons-------
        search = new JButton("Cauta");
        add (search);

        title.setBounds(10,1,100,100);
        text.setBounds(10,100,150,20);
        country.setBounds(150,100,200,20);
        search.setBounds(10,150,100,20);

        search.addActionListener(new csearch()); 
    }

class csearch implements ActionListener {

    public void actionPerformed(ActionEvent event) {
        //dispose();
        //WindowTime wt = new WindowTime(null);

        date1 = new JLabel();
        date1.setVisible(false);

        SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
        Date date = new Date();
        //  String dateInString = "02-11-2016 12:06:55 AM";
        //    Date date = formatter.parse(dateInString);
        TimeZone tz = TimeZone.getDefault();

        // From TimeZone Asia/Singapore
        System.out.println("TimeZone : " + tz.getID() + " - " + tz.getDisplayName());
        System.out.println("TimeZone : " + tz);
        System.out.println("Date (Ro - UTC+02:00) : " + formatter.format(date));

        // To TimeZone America/New_York
        SimpleDateFormat sdfAmerica = new SimpleDateFormat(DATE_FORMAT);
        SimpleDateFormat sdfParis = new SimpleDateFormat(DATE_FORMAT);
        DateTime dt = new DateTime(date);
        DateTimeZone dtZone = DateTimeZone.forID(country.getText());
        DateTime dtus = dt.withZone(dtZone);
        TimeZone tzInAmerica = dtZone.toTimeZone();
        Date dateInAmerica = dtus.toLocalDateTime().toDate(); //Convert to LocalDateTime first

        sdfAmerica.setTimeZone(tzInAmerica);

        date1.setText(String.valueOf(dateInAmerica));                
        add(date1);

        date1.setBounds(10,200,1000,40);

        }  
    }           
}         

谁能帮帮我?

【问题讨论】:

    标签: java swing


    【解决方案1】:

    如果点击多次,时间将不可读

    问题是您不断地创建新的 JLabel 并将它们添加到框架中,因此每个标签的文本会相互叠加。不要在每次单击按钮时都创建新的 JLabel。

    而是在创建框架时创建标签并将其添加到框架中。

    然后你只需使用:

    label.setText(...);
    

    更改标签的文本。

    另外,您不应该使用空布局。 Swing 旨在与布局管理器一起使用。阅读 Layout Managers 上的 Swing 教程部分,了解更多信息和工作示例。

    【讨论】:

    • 谢谢,它正在工作。我不知道我怎么会犯这样的错误。
    猜你喜欢
    • 2010-12-19
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多