【问题标题】:How to change JFrame label from JPanel swing如何从 JPanel swing 更改 JFrame jlabel
【发布时间】:2011-05-01 14:06:20
【问题描述】:

您好,我需要从 JPanel 更改 JFrame 上的 JLabel。我只能在鼠标移动时更改此设置,但每次 score++ 时我都需要更改;

private void panelKwadraty1MouseMoved(java.awt.event.MouseEvent evt)                                          
{                                              
 jLabel1.setText("Twoj wynik to: "+panelKwadraty1.getScore());
} 

我需要在以下时间更改:

 if (kwadrat[i].sprawdzKolizje(belka) == 1)
              {
                  kwadrat[i]=new Kwadrat(kwadrat[i].getKolor());
                  score++;
                 // Jframe.jLabel1.setText("Your score is :" + score); <--- i need do that
              }

编辑:

我解决了问题。我用propertyChangeListener。

在 JFrame 中:

    panelKwadraty1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
        public void propertyChange(java.beans.PropertyChangeEvent evt) {
            panelKwadraty1PropertyChange(evt);
        }
    });

    private void panelKwadraty1PropertyChange(java.beans.PropertyChangeEvent evt)
    {
        if(evt.getPropertyName().equals(PanelKwadraty.ZMIANA_WYNIKU)){
            setLabelText(""+evt.getNewValue());
        }
    }

在 JPanel 中:

  int old_score = score;
  score++;
  this.firePropertyChange(ZMIANA_WYNIKU, old_score, score);

【问题讨论】:

  • jLabel1 是 jFrame 中的公共字段吗?

标签: java swing jframe jpanel


【解决方案1】:

根据您提供的代码,我假设 jLabel1 是公共的,因为您在面板的方法中调用它。

因此,我认为您的问题可能是当您移动鼠标时发生了很多变化并且标签没有足够快地重新绘制。为了确保它的重绘尽快发生,请使用以下代码:

    private void setLabelText(String text)
    {
        jLabel1.setText(text);
        jLabel1.paintImmediately(jLabel1.getVisibleRect());
    }

希望就是这样。

【讨论】:

  • @mientus 我有一些代码,我将编辑到我当前的答案中,这将表明你可以简单地获得你的标签。目前,我的最大编辑次数已过期。
  • dobra misiek napisze Ci maila o co mi chodzi ;d
【解决方案2】:

在 JFrame 中将 jLabel1 设为公共,以便 JPanel 可以访问它。如果 JFrame 和 JPanel 都属于同一个类,那么只需将 jLabel1 设为全局,jPanel 就可以访问它。

【讨论】:

  • 好的,但是如何访问它?我没有 JFrame 变量!
  • @mientus: [jFrame, jPanel] 都属于同一类吗?
  • @mientus:似乎两者都属于不同的类别。在这种情况下,通过将 jLabel1 声明为 public 或为其创建 getter 方法,使其公开可用。然后在 jPanel 所在的类中,您必须创建一个具有 jFrame 的 Class 实例,然后执行您的工作。
  • jFrame 和 jPanel 不是同一个类。
  • @meintus:那就看看我在你面前发表的评论。
【解决方案3】:

是控件进入if() ??如果它们在同一个窗口中,则不必将其引用为 JFrame.JLabel .. 您只需将 JLabel 公开并调用该方法 jLabel1.setText() simple..你能告诉我们更多关于组件放置位置的信息吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2013-10-30
    • 2012-03-27
    • 2021-12-23
    • 2021-12-16
    • 2010-09-18
    相关资源
    最近更新 更多