java - 将文本从一件事更改为另一件事的 JLabel

标签 java swing jframe jlabel

我正在研究这个程序,但遇到了另一个问题。我有一个带有 JLabel 的 Jframe,我希望它能将文本从一个事物更改为另一个事物。但是,当我尝试这样做时,它并没有向我显示正在更改的文本,而是显示我将其设置为的最后一个文本。

如何让我的 JLabel 缓慢循环显示文本?

我正在尝试一种等待方法来让程序运行缓慢,这样我就可以看看是否可以让它循环运行,但这似乎不起作用。

如果有人可以编辑我的代码或制作他们自己的示例来说明如何执行此操作,那将会很有帮助,谢谢!

public class CreditGraphics {

    public String cardNum;
    public JFrame frame;
    public JPanel panel;
    public JLabel label;
    public JTextField text;

    public CreditGraphics() {
    synchronized(this){
    try {


        frame = new JFrame("HI");
        panel = new JPanel();
        label = new JLabel();

        text = new JTextField(16);

        panel.add(label);
        panel.add(text);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setPreferredSize(new Dimension(500, 500));
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true); 

        wait(4000);
        label.setText("Hi");
        wait(4000);
        frame.revalidate();
        frame.repaint();
        label.setText("Hello");
        frame.revalidate();
        frame.repaint();


        text.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                cardNum = text.getText();

            }

        });

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

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {


                new CreditGraphics();

               }




        });
    }

    public void checkCard(){


    }

}

最佳答案

按照@trashgod 的建议使用 Swing Timer这更适合 swing 应用程序执行一次任务、延迟执行任务或重复执行任务。

示例代码:

private Timer timer;
...
label.setText("Hi");
// delay of 4 seconds
timer=new Timer(4000,new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        label.setText("Hello");
        // timer.stop(); // stop the timer if repeated mode is on
    }
});
timer.setRepeats(false); // you can turn-on it if needed
timer.start();

注意:

  • 在这种情况下无需调用 frame.repaint()frame.revalidate()
  • 覆盖 getPreferredSize() 以在自定义绘画的情况下设置 JPanel 的首选大小。

示例代码:

JPanel panel = new JPanel() {

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(..., ...);
    }
};

read more...

关于java - 将文本从一件事更改为另一件事的 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019050/

相关文章:

Java - 无法转换为 double

javascript - 直接从microstrategy获取导出的PDF文档

java - 如何在 Java Swing 中正确设计 MV 应用程序?

java - 递归地将ArrayList数据添加到JTable中

java - 如何通过单击按钮从另一个 jframe 打开隐藏的 jframe

java - 隐形JFrame/JTable 快多少?

java - 我如何重用我的 JFrame 来一个接一个地显示多个 GUI,而不是为每个创建一个新的 JFrame?

java - 将 Component Z Order 结果设置为非法位置

java - 将秒数转换为 HH :MM (without seconds) in Java

java - 不同路径解析器