2011-05-01 120 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()简单..你能告诉我们更多关于哪里的部件放在哪里?