2011-05-01 125 views
2

您好,我需要從JPanel更改JFrame上的JLabel。只有當鼠標移動時,我纔可以改變這一點,但每當得分++時我都需要改變;如何從JPanel swing更改JFrame標籤

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

它是jLabel1 jFrame中的公共字段? – 2011-05-01 14:09:22

回答

2

從你提供我假定jLabel1的是公開的,因爲你是在面板的方法中調用它的代碼。

因此我認爲,在這裏你的問題可能是有很多的變化,當你移動鼠標和標籤不被重新繪製的速度不夠快。爲了確保其重繪發生儘快使用下面的代碼:

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

希望就是這樣。

+0

我的代碼:http://pastebin.com/7ZvF3HyK – mientus 2011-05-01 14:34:31

+0

@mientus我有一些代碼,我將編輯到我目前的答案,這將顯示你只是你​​可以得到你的標籤。目前,我過了一天的最大編輯。 – Boro 2011-05-01 14:42:46

+0

dobra misiek napisze Ci maila o co mi chodzi; d – mientus 2011-05-01 14:46:07

1

請在JFrame中jLabel1公開,這樣的JPanel可以訪問它。如果JFrame和JPanel都屬於同一類,那麼只需全局設置爲jLabel1,jPanel就可以訪問它。

+0

好吧,但如何獲得它?我沒有JFrame變量! – mientus 2011-05-01 14:12:19

+0

@mientus:這兩個[jFrame,jPanel]是否在同一個類中? – 2011-05-01 14:13:30

+0

@mientus是最好的,如果你可以使用更多/所有的代碼。 – Boro 2011-05-01 14:16:10

0

是控制進入if()??你沒有引用它作爲JFrame.JLabel如果他們是在同一個窗口。你只需要做出一個JLabel市民和調用方法 jLabel1.setText()簡單..你能告訴我們更多關於哪裏的部件放在哪裏?