Dostep do JFrame z Jpanelu w swingu ?

0

Czesc, otoz mam problem, w jframie mam label ktory chcialbym uaktualniac gdy stanie sie jakies zdarzenie w jpanelu, mianowicie jpanelu uaktualniam wynik i chcialbym zeby label sie uaktualnial ktory jest w JFramie. Ktos moze mi pomoc ;)?

0

Metoda setText(String) tego Labela.

0

Nie zadawałbym takiego pytania gdyby było to an tyle łatwe. To powiedz w jaki sposób mam sie dostać do tego labela ktory sie znajduje w JFrame z JPanelu?

0
@Override
	public void actionPerformed(ActionEvent e){
		Object src = e.getSource();
				if(src==Button){
                                 Label.setText(wynik+" ");  // to o czym mówił Razi91 + konkatenacja ze stringiem jeśli wynik to 'int'.
                                 }
                              }

Chyba tak to sie robi...

0

Chodzi mi o takie coś:

W JPanelu ktory sie znajduje w JFrame chce zrobić:

...
score++;
JFrame.label1.setText(""+score);
...
z tym ze nie jestem wstanie bo nie mogę sie dostać do JFrame bo on jest tworzony anonimowo? i nie ma zmiennej do ktorej moge sie odwolac.

0

;)

0

Chodzi o to, ze zeby zaktualizować wynik labela znajdujacego sie na JFramie musze robic tak:

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

Jedynie ruch myszki uzupełnia wynik, a chce zeby podczas aktualniania score w panelu zmienial sie score na frame:

 if (kwadrat[i].sprawdzKolizje(belka) == 1)
                  {
                      kwadrat[i]=new Kwadrat(kwadrat[i].getKolor());
                      score++;
                     // NewJFrame.frame.setLabel(score);
                  }

Mam aplikacje ze spadaja kwadraty na belke i jak kwadrat dotknie belki to zalicza mi punkt, a wszystko dzieje sie w panelu, a chce wynik wyswietlac na frame ;d Nie wiem czy nadal zrozumiałe ?

0

jeszcze tak w ramach wyjasnienia ze setLabel we Framie ma robić:

  void setLabel(int score){
        jLabel1.setText("Twoj wynik to: "+score);
    }
0

Ten JFrame musi mieć nazwę.

0

Moze jak wkleje caly kod bedzie troche jasniej: http://pastebin.com/7ZvF3HyK
Chodzi o to ze nie ma nazwy ten JFrame, swing jakos to dziwnie generuje ?

0

coś u ciebie kiepsko z obiektówką. To twój pierwszy język? Moim zdaniem zaczynanie obiektówki od okienek to zły pomysł, bo potem dla kogoś takiego klasa jest utożsamiana z elementem graficznym, a sama obiektówka kuleje.

Do tego panelu przekaż referencję do tego labela, np:
w w klasie: JLabel label=null;
potem metoda, w której przekazujesz tego labela:

public void ustawLabel(JLabel l){
    this.label=l;
}

I to wywołujesz przekazując tego labela zaraz po utworzeniu tego panelu
I potem tam gdzie chcesz uaktualnić jego treść:

if(label!=null)
  label.setText("wynik");

Możesz też przekazać cały obiekt głównego okna, dostajesz się wtedy do labela przez kropkę, ale wtedy ten label musi być public, albo robisz gettera który tego labela zwraca, albo ustawia mu nowy tekst

0

Dlacezgo kiepsko z obiektówka ?! Poradzilem sobie troche ladniejszym sposobem...

        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());
        }
    }
 
      int old_score = score;
      score++;
      this.firePropertyChange(ZMIANA_WYNIKU, old_score, score);
0

btw. czasami szukasz bardziej skomplikowanych rozwiazan a nie wpadniesz na najprostrze, moze dlatego ze w netbeansie jest kod generowany samodzielnie i min. jpanel i nie wpadlem zeby przekazywac do kontruktora jlabela. Przyznam, ze bardziej szukalem czegos w stylu eventu i udalo sie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1