[英]How to update JLabel text when varible from another class changes?
[英]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.