Przekazywanie miedzy klasami

Przekazywanie miedzy klasami
0

Tworzę program w aplikacji okienkowej, każde okno osobny plik XXX.java

Jak przekazać wartości (cary, inty itp) między klasami XXX.java w tym samym pakiecie?

Kopiuj
public class Szyfrowanie extends JFrame{
    public Szyfrowanie(){
        setVisible(true);
        setTitle("Szyfrowanie");
        setLayout(null);
        setBounds(100,100,500, 500);
//i takie tam...
        

    }
}

oraz

Kopiuj
public class Macierz9 extends JFrame{
    
    public Macierz9(){
        setVisible(true);
        setTitle("Macierz 9");
        setLayout(null);
        setBounds(100,100,500, 550);
                
        JLabel l = new JLabel("D");
        l.setBounds(20, 40, 50, 50);
        l.setBorder(BorderFactory.createEtchedBorder());
        l.setHorizontalAlignment(JLabel.CENTER);
        add(l11);
        
        
    }
    
}

Chcę z pola l wartość "D" przekazać jako char do szyfrowanie.java.
Pomocy :-(

0

W Twoim kodzie l nie jest polem, jest zmienną lokalną. Wpierw zrób z tego pole, potem pogadamy o przekazywaniu.

0

O to chodzi ?

Kopiuj
public class Macierz9 extends JFrame{
   
    char przyklad;
    public Macierz9(){
        setVisible(true);
        setTitle("Macierz 9");
        setLayout(null);
        setBounds(100,100,500, 550);
               
        JLabel l = new JLabel("D");
        l.setBounds(20, 40, 50, 50);
        l.setBorder(BorderFactory.createEtchedBorder());
        l.setHorizontalAlignment(JLabel.CENTER);
        add(l11);
       
       przyklad = l11.getText().charAt(0); //pobranie z JLabel i konwersja ze string na char
    }
   
}
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 9 godzin
0

Przekazuje się między obiektami, a nie klasami. Klasy to niemutowalne obiekty opisujące obiekty :)

Na myśl przychodzą mi jakieś EventListenery (albo inne namiastki Aktorów: http://en.wikipedia.org/wiki/Actor_model#Programming_with_Actors )

W obydwu klasach powinny być synchronizowane (albo i nie, w końcu Swing jest jednowątkowy i możesz wszystko wywoływać z EDT) metody przyjmujące eventy (gdzie event to nawet chociażby dowolna klasa) i tylko w ten sposób powinna zachodzić komunikacja.

Najlepiej jednak użyć Aktorów i nie przejmować się synchronizacją explicite. Tyle, że to już trochę wyższa szkoła jazdy i pewnie nie będzie się tu opłacać ;)


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
iooi
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:573
0

Skoro ma to być proste przekazanie tekstu z kontrolki i wiesz, jak stworzyć pole (wyciągnięcie deklaracji poza konstruktor; oczywiście trzeba by do tego uczynić 'l' prywatnym i stworzyć gettera), to zrób to samo z labelem. Potem w 'Szyfrowanie' proste:

Kopiuj
referencjaDoObiektuMacierz9.getL().getText().charAt(0); // mamy char

Tak dla uproszczenia.

0

Jeszcze spytam, a jaki jest sens pobierania tekstu z JLabela? Użytkownik nie może go zmienić, zatem albo jest cały czas taki sam, wystarczy wtedy do konstruktora tej drugiej klasy przekazujemy tekst, który chcemy wyświetlić na JLabelu, albo kod zmieniający tekst dodatkowo informuje obiekt tej drugiej klasy o zmianie tekstu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.