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?

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

    }
}

oraz

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 ?

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
    }
   
}
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ć ;)

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:

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.

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