Jak z paneul użytkownika odwołać się do klas zewnętrznych?

0

Witam

Jestem początkującym programistą. Jak do tej pory pisałem programy, gdzie cały kod programu znajdował się w jednej klasie. Obecnie piszę program szyfrujący i muszę podzielić kod z klasy Interfejs na kilka klas tzn. klasa Interfejs obejmować ma tylko graficzny panel użytkownia, natomiast algorytmy szyfrujące i deszyfrujące muszę umieścić w oddzielnych klasach.

Kod aplikacji przedstawiam poniżej.

  • Aplikacja pisana jest w BlueJ;
  • Kod kompiluje się poprawnie.

Wszystkie próby modyfikowania kodu kończyły się fiaskiem.

Proszę o napisanie jednej klasy, na podstawie której będe mógł dalej modyfikować kod programu.

Wielkie dzięki za wszelką pomoc !!!
Pozdrawiam Arkasam

public class Interfejs
{
JFrame pole;
JPanel pole1, pole2, pole3, pole4, pole5, pole6, pole7, pole8, pole9;
JCheckBox cb1,cb2;
JLabel ety,ety2, ety3, ety4, ety5, ety6, ety7, ety8;
JTextField liczba;
JButton przycisk1, przycisk2, przycisk3;
JTextArea poleTekstowe1, poleTekstowe2;
JScrollPane przewijanie1, przewijanie2;
String c, note, note1, bufor;

public void startujemy()
       
{      
    pole = new JFrame("Program szyfrujący");                
    pole.setSize (800, 600);                                
    pole.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JMenuBar pasekMenu = new JMenuBar();
    pole.setJMenuBar(pasekMenu);
    
    JMenu menuPlik = new JMenu("Plik");
    pasekMenu.add(menuPlik);
    
    JMenuItem plikOtwórz = new JMenuItem("Otwórz");
    menuPlik.add(plikOtwórz);
    
    JMenuItem plikZapisz = new JMenuItem("Zapisz");
    menuPlik.add(plikZapisz);
    
    JMenuItem plikZamknij = new JMenuItem("Zamknij");
    menuPlik.add(plikZamknij);
        
    plikZamknij.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(pole, "Następuje zamknięcie systemu !");
            System.exit(0);
        }
    }
);

/**
 * Układ graficzny panelu użytkownika
 */
    
Container zawartość = pole.getContentPane();        
pole.setLayout(new BorderLayout());

JPanel pole1 = new JPanel();
pole.add(pole1, BorderLayout.NORTH);
pole1.setLayout(new GridLayout(1,4));

ety = new JLabel("",JLabel.CENTER);
pole1.add(ety);

cb1 = new JCheckBox("Szyfr Cezara");
pole1.add(cb1);

cb2 = new JCheckBox("Szyfr atBash");
pole1.add(cb2);

pole2 = new JPanel();
pole1.add(pole2);
pole2.setLayout(new GridLayout(3,1));
    
ety2 = new JLabel("Cezar - przestawienie ", JLabel.CENTER);
pole2.add(ety2);

liczba = new JTextField();
liczba.setOpaque(true);
liczba.setBackground(Color.RED);
pole2.add(liczba);

przycisk1 = new JButton("Wprowadź");
przycisk1.setBackground(Color.YELLOW);
pole2.add(przycisk1);

pole3 = new JPanel();
pole.add(pole3);

pole3.setLayout(new GridLayout(2,1));

poleTekstowe1 = new JTextArea();
pole3.add(poleTekstowe1);

przewijanie1 = new JScrollPane(poleTekstowe1,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
pole3.add(przewijanie1);

poleTekstowe2 = new JTextArea();
pole3.add(poleTekstowe2);

przewijanie2 = new JScrollPane(poleTekstowe2,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
pole3.add(przewijanie2);

pole4 = new JPanel();
pole.add(pole4, BorderLayout.EAST);

pole4.setLayout(new GridLayout(2,1));

ety4 = new JLabel("Szyfr Cezara");
ety4.setOpaque(true);
ety4.setBackground(Color.RED);
pole4.add(ety4);

ety5 = new JLabel("Szyfr atBash");
ety5 .setOpaque(true);
ety5.setBackground(Color.RED);
pole4.add(ety5);

pole5 = new JPanel();
pole.add(pole5, BorderLayout.WEST);

pole5.setLayout(new GridLayout(2,1));

ety6 = new JLabel("Tekst Jawny");
pole5.add(ety6);

ety7 = new JLabel("Tekst Tajny");
pole5.add(ety7);

pole6 = new JPanel();
pole.add(pole6, BorderLayout.SOUTH);

pole6.setLayout(new GridLayout(1,3));    

przycisk2 = new JButton("Szyfruj");
przycisk2.setBackground(Color.PINK);
pole6.add(przycisk2);

przycisk3 = new JButton("Odszyfruj");
przycisk3.setBackground(Color.PINK);
pole6.add(przycisk3);

/**
 * Zmiana koloru w 2 etykietkach podczas wyboru szyfrowania;
 */

cb1.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
if(cb1.isSelected()){
ety4.setBackground(Color.GREEN);
liczba.setBackground(Color.WHITE);
}
else
{
ety4.setBackground(Color.RED);
liczba.setBackground(Color.RED);
}
}
}
);

cb2.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(cb2.isSelected())
            ety5.setBackground(Color.GREEN);
            else
            ety5.setBackground(Color.RED);                           
        }
    }
    );
   
 przycisk2.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){         
            
           if (cb1.isSelected() && cb2.isSelected())
           {
               /**
                * Szyfrowanie dwoma szyframi Cezar i atBash.
                */
                                                
                }

            else if(cb1.isSelected())
            {
                /**
                 * Algorytm szyfru Cezara.
                 * Ten kod muszę zmodyfikować i  umieścić w osobnej klasie.
                 * Docelowo kod będzie tak zmodyfikowany, aby wartość przestawienia 
                 * liter wczytywana była z pola "liczba = new JTextField()";
                 * po kliknięciu na przycisk "przycisk1 = new JButton("Wprowadź")";
                 */

                note = poleTekstowe1.getText();
                char x[] = note.toCharArray();
                for( int i=0 ; i!=x.length ; i++) 
                { 
                    int n = x[i]; 
                    n-=3; 
                    x[i]=(char)n; 
                }
                    note = new String(x);
                    poleTekstowe2.setText(note);
                    poleTekstowe1.setText("");
                }
                
                else if (cb2.isSelected())
                {
                    /**
                     *  Algorytm szyfru atBash.
                     *  Ten kod muszę zmodyfikować i  umieścić w osobnej klasie.
                     */

                    note = poleTekstowe1.getText();
                          char x[ ] = note.toCharArray( );
                            for( int i=0 ; i!=x.length ; i++) 
                            { 
                                int n = x[i]; 
                                n='M'-n; 
                                n+='N'; 
                                x[i]=(char)n; 
                            }
                                note = new String(x);
                                poleTekstowe2.setText(note);
                                poleTekstowe1.setText("");
                            }
                            else 
                                    JOptionPane.showMessageDialog(null,"Nie został wybrany rodzaj szyfrowania !!!");
                            
                        }                    
                    }
                    );

przycisk3.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if (cb2.isSelected()){

                /**
                 * Algorytm deszyfratora szyfru Cezara.
                 * Ten kod muszę zmodyfikować i  umieścić w osobnej klasie.
                 */

                    note = poleTekstowe1.getText();
                            char x[ ] = note.toCharArray( ); 
                            for( int i=0 ; i!=x.length ; i++) 
                            { 
                                int n = x[i]; 
                                n='M'-n; 
                                n+='N'; 
                                x[i]=(char)n; 
                            }
                                note = new String(x);
                                poleTekstowe2.setText(note);
                                poleTekstowe1.setText("");
                            }
                        }
                    }
                    );
    
    pole.setVisible(true);
}

public static void main (String[] args)
{
    Interfejs aplikacja;
    aplikacja = new Interfejs();
    aplikacja.startujemy();
}

}

0

Klasa zewnętrzna:

public class KlasaZewnetrzna{

     public KlasaZewnetrzna(){}

     public void metodaKlasyZewnetrznej(){}

}

Ze swojej klasy odwołujesz się do klasy zewnętrznej poprzez jej referencję, czyli:

public class Interfejs(){

     KlasaZewnetrzna klasaZewnetrzna = new KlasaZewnetrzna();

     public void startujemy(){
    
     klasaZewnetrzna.metodaKlasyZewnetrznej();

    //.....//
    }

}
0

Wielkie DZIĘKI za pomoc !!!

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