Как изменить метку JFrame с JPanel swing - PullRequest
2 голосов
/ 01 мая 2011

Привет, мне нужно изменить JLabel, который находится на JFrame, от JPanel.Я могу изменить это только когда мышь движется, но мне нужно менять каждый раз, когда счет ++;

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
              }

edit:

Я решил проблему.Я использовал 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 ]

2 голосов
/ 01 мая 2011

Из предоставленного вами кода я предположил, что jLabel1 является общедоступным, поскольку вы вызываете его в методе панели.

Таким образом, я думаю, что ваша проблема здесь может заключаться в том, что при перемещении мыши происходит много изменений, и ярлык перекрашивается недостаточно быстро.Чтобы убедиться, что его перекраска происходит как можно скорее, используйте код ниже:

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

Надеюсь, что это было.

1 голос
/ 01 мая 2011

Сделайте jLabel1 общедоступным в JFrame, чтобы JPanel мог получить к нему доступ. И если JFrame и JPanel принадлежат одному и тому же классу, просто сделайте jLabel1 глобальным, и он будет доступен для jPanel.

0 голосов
/ 01 мая 2011

это элемент управления входит в if () ??вам не нужно ссылаться на него как на JFrame.JLabel, если они находятся в одном и том же окне. Вы просто должны сделать JLabel общедоступным и вызвать метод jLabel1.setText() simple .. Можете ли вы рассказать нам больше о том, где размещены компоненты?

...