【问题标题】:Changing text frame color - app. is freezing更改文本框架颜色 - 应用程序。结冰了
【发布时间】:2015-02-03 21:05:32
【问题描述】:

好的,所以我们的任务是创建一个猜谜游戏,用户输入一个数字,如果它太高,文本前景应该变为红色,如果太低,则变为蓝色,或者如果准确则变为绿色.

我们的老师已经发布了执行此操作的代码,并且非常简单,我可以理解。问题是,当我尝试根据需要重新格式化它时,我得到了JFrame,我得到了可以输入它的文本字段,但是当我单击提交时就像冻结一样。我想这与动作监听器的编写方式有关,但我不确定。

任何帮助将不胜感激。

这是我的代码,经过编辑,只显示特定部分”

 button.addActionListener(
        new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {


                userInput = keyboard.next();

                if(Integer.parseInt(userInput) > randomNumber)
                    {
                        tf.setForeground(Color.red);;
                    }
                    else if(Integer.parseInt(userInput) < randomNumber)
                    {
                        tf.setForeground(Color.blue);
                    }
                    else if(Integer.parseInt(userInput) == randomNumber)
                    {
                        tf.setForeground(Color.green);
                    }

                }
            }
           );
    }

【问题讨论】:

  • 不要混用控制台输入和 GUI 输入,那样会让人困惑
  • 您仍在从控制台获取信息。同样,不要这样做。

标签: java swing jframe jtextfield event-dispatch-thread


【解决方案1】:
while(true)

这就是问题所在。不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing

【讨论】:

  • 不太清楚我是如何阻止它的,目前只是我学习Java的第二个学期。
  • 这会导致无限循环。 EDT 正忙于循环,无能为力。
  • 嗯,事情是这样的,即使在它有这个之前,虽然(真的)它仍然这样做。我认为它可能有助于它有一个真实的陈述。
  • 另外,例如,这是教师必须更改文本字段颜色的代码: new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO 自动生成的方法存根随机兰德=新随机(); int r = rand.nextInt(256); int g = rand.nextInt(256); int b = rand.nextInt(256);颜色颜色=新颜色(r,g,b); tf.setForeground(color);
  • “好吧,事情是这样的,即使在它有这个之前,虽然(真的)它仍然这样做。” 为了更快地获得更好的帮助,请发布MCVE(最小完成可验证示例)或“之前”代码的SSCCE(简短、自包含、正确示例)。请注意,MCVE 需要导入(我将其编辑为问题)以及将其放在屏幕上的主要方法。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2018-10-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多