【问题标题】:Updating a JLabel within a JFrame在 JFrame 中更新 JLabel
【发布时间】:2020-01-12 20:29:12
【问题描述】:

我已经在这个网站和互联网上搜索了几个小时,试图找出如何解决这个问题。我正在创建一个游戏,这是我第一次使用图形。我想出了如何创建 JFrame、JPanel 和 JLabel,而我似乎无法解决的唯一问题是更新 JLabel。假设我是这样开始的:

JLabel testing = new JLabel ("blah", JLabel.CENTER);
testing.setAlignmentX(0);
testing.setAlignmentY(0);
frame.add(testing);

我可以通过使用testing.setText("hi"); 来更改Thread.sleep(2500) 之后的文本,但是JLabel 的先前状态(上面写着blah)仍然存在。 “嗨”只是出现在顶部。我试过testing.setVisible(false);,还有很多其他的东西,但没有什么能让我显示JLabel,隐藏它,然后改变它。

有什么想法可能是错的吗? 谢谢

【问题讨论】:

  • setText 应该按您的预期工作;一定还有其他问题。你能展示更多你的代码吗?
  • 查看The Event Dispatch ThreadConcurrency in Swing 以更好地了解Swing API 的工作原理以及您遇到问题的原因。请参阅How to use Swing Timers 了解一种可能的解决方案
  • @OhleC(字符串测试在类中是静态的)public static void main(String[] args) throws Exception{ JFrame frame = new JFrame("Wong & Irwin Are Cool"); ISU panel = new ISU(); frame.add(panel); frame.setResizable (false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(350, 50); frame.pack(); frame.setVisible(true); JLabel testing = new JLabel (test, JLabel.CENTER); testing.setAlignmentX(0); testing.setAlignmentY(0); frame.add(testing); Thread.sleep(2000); testing.setVisible(false); test = "hi"; testing.setText(test);
  • @OhleC 哎呀,结果不太好。我希望你能好好读。 ISU 是类名
  • @OhleC public ISU() { setPreferredSize(new Dimension (600, 600)); }

标签: java swing graphics jframe jlabel


【解决方案1】:

不要sleep 或以其他方式阻塞 AWT 事件调度线程 (EDT)。

请改用javax.swing.Timer。注意:不是不同包中的任何其他同名类。

            javax.swing.Timer timer =
                new javax.swing.Timer(2500, event -> {
                    testing.setText("hi");
                });
            timer.setRepeats(false);
            timer.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多