cześć
Mam klasę MyFrame, w której jest metoda getZmienna() zwracająca zmienną "zapisywanie". Chciałbym odczytać tą zmienną w klasie Zapis. Mam taki problem, że tak klasa w ogóle się nie wykonuje bo nie jest dodana do MyFrame, a (chyba) musi byc tam dodana bo MyFrame jest dodane do głównej metody programu.
Nie wiem jak lepiej opisać problem, może lepiej pokażę klasy.
Metoda główna:
public class Test {
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});
}
}
Po użyciu menu zapisz zmienna zapisywanie ma zmienić wartość, która zostanie odczytana w klasie Zapis, tam przekazana do if i wykona się zapis do pliku
public class MyFrame extends JFrame implements ActionListener {
PrawyPanel prawyPanel= new PrawyPanel();
LewyPanel lewyPanel=new LewyPanel(prawyPanel);
MyFrame ramka = new MyFrame();
JScrollPane przewijanie = new JScrollPane(lewyPanel);
JMenuBar menu = new JMenuBar();
JMenu menuPlik;
JMenuItem mOtwórz,mZapisz;
int zapisywanie;
public MyFrame(){
super("Hello World");
try{
Zapis zapis = new Zapis(lewyPanel,ramka);
}
catch(IOException wyjatek){
System.out.println("błąd IOE");
}
menuPlik = new JMenu("Plik");
mZapisz=new JMenuItem("zapisz");
mOtwórz=new JMenuItem("otwórz");
menuPlik.add(mZapisz);
mZapisz.addActionListener(this);
menuPlik.add(mOtwórz);
setJMenuBar(menu);
menu.add(menuPlik);
przewijanie.setPreferredSize(new Dimension(1050,750));
JPanel panelGlowny = new JPanel(); //panel główny
panelGlowny.setLayout(new FlowLayout());
panelGlowny.add(przewijanie);
panelGlowny.add(prawyPanel);
setContentPane(panelGlowny);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1400, 800);
setLocation(30,50);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
if(source==mZapisz){
zapisywanie=1;
}
}
public int getZmienna(){
return zapisywanie;
}
}
klasa, która będzie zapisywać dane z lewego panelu do pliku
public class Zapis {
LewyPanel lewy = null;
MyFrame ramka = null;
public Zapis(LewyPanel lewy, MyFrame ramka)throws IOException{
this.lewy=lewy;
this.ramka=ramka;
PrintWriter zapis = new PrintWriter("zapis.txt");
if(ramka.getZmienna()==1){
System.out.println("działa");
}
}
}
kod w takiej postaci się kompiluje, ale po uruchomieniu programu rokienko się nie pokazuje, program coś robi (jak by jakąś pętlę w nieskończoność). Gdy usunę linijkę
MyFrame ramka = new MyFrame();
z klasy Zapis program działa, działa też jeśli usunę blok wyjątku z klasy MyFrame, ale gdy zrobię którąś z tych rzeczy tracę dostęp do danych.
Chyba trochę za bardzo namieszałem i nie mogę sobie z tym poradzić :P Proszę o pomoc