如何从JPanel swing中更改JFrame jlabel

时间:2011-05-01 14:06:21

标签: java swing jframe jpanel

我需要从JPanel更改JFrame上的JLabel。我只能在鼠标移动时才能改变它,但每次得分时都需要改变++;

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);

3 个答案:

答案 0 :(得分:2)

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

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

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

希望就是这样。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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