簡體   English   中英

JLabel將文本從一件事更改為另一件事

[英]JLabel that changes text from one thing to another

我正在研究此程序,卻遇到了另一個問題。 我有一個帶有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計時器 ,它更適合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(..., ...);
    }
};

閱讀更多...

不要使用Thread.sleep()方法或wait(),因為它會凍結你的Swing應用程序。

相反,您應該使用javax.swing.Timer

有關更多信息和示例,請參見Java教程如何使用Swing計時器課程:Swing中的並發

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM