我该如何刷新这个面板

时间:2015-02-02 16:44:19

标签: java swing

我想制作一种数字时钟,你可以通过使用输入刷新时钟显示来激活,为此我使用这种方法:

private static void GUI(String time, int action){
    JLabel textLabel = new JLabel(time);
    JPanel panel = new JPanel();
    JFrame enterMessage = new JFrame("Tester");
    if (action == 1){

        enterMessage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        enterMessage.setSize(190, 80);
        enterMessage.setVisible(true);

        panel.setBackground(Color.WHITE);

        panel.add(textLabel);

        enterMessage.add(panel);
    }else {
        System.out.printf("Refresh");
        panel.revalidate();
        enterMessage.revalidate();
        panel.repaint();
        enterMessage.repaint();
        }
    }
}

此方法在程序代码中被调用两次:一次在打开程序时创建GUI,每次检测到enterpress以刷新它。我在互联网上搜索了如何刷新JPanel,我发现您需要使用revalidate();然后repaint();,但它不会刷新面板显示的时间。我该怎么刷新它?

ps:时间从main传递为字符串,每次检测到enterpress都会被覆盖并传递

1 个答案:

答案 0 :(得分:2)

遵循Java命名约定。变量名称不应以大写字符开头。

请勿继续在面板上添加标签。只需使用JLabel的setText(...)方法来更改正在显示的文本。

编辑:

SSCCE的一个示例,向您展示如何使用setText(...)方法:

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

public class TimerTime extends JPanel implements ActionListener
{
    private JLabel timeLabel;

    public TimerTime()
    {
        timeLabel = new JLabel( new Date().toString() );
        add( timeLabel );

        Timer timer = new Timer(1000, this);
        timer.setInitialDelay(1);
        timer.start();
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        //System.out.println(e.getSource());
        timeLabel.setText( new Date().toString() );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("TimerTime");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TimerTime() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}