Witam, nie wiem czy dobrze określiłem temat, dlatego opiszę na czym polega mój problem. Piszę pracę inż i od ponad 2 tygodni nie mogę uporać się z następującym problemem, z grubsza wygląda to tak:
Mam aplikację, która po uruchomieniu wyświetla menu główne z 3 podmenu do wyboru, kliknięcie każdego z tych podmenu odpala je w nowym oknie:
public class menuGlowne extends JFrame
{
Container panel = getContentPane();
.....
//jedno z 3 podmenu
przydzial.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
RamkaMenuPrzydzial ramka=new RamkaMenuPrzydzial(rok);
ramka.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ramka.setVisible(true);
}
catch (Exception ee)
{
}
}
});
.....
}</span>
Klasa RamkaMenuPrzydzial wygląda następująco:
class RamkaMenuPrzydzial extends JFrame
{
public static Container panel;
public RamkaMenuPrzydzial(int rok)
{
panel = getContentPane();
menuPrzydzial menu = new menuPrzydzial(this,rok);
panel.add(menu);
setSize(Toolkit.getDefaultToolkit().getScreenSize());
setTitle("System wspomagający przydział zajęć dydaktycznychPrz");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//ustawienie naszego menu
setJMenuBar(menuPrzydzial.pasekMenu);
}
}</span>
Klasa ta odpala menuPrzydział, które wygląda tak
public class menuPrzydzial extends JPanel
{
static JMenuBar pasekMenu = new JMenuBar();
JMenu menuProwadzacy = new JMenu("Prowadzący ");
JMenuItem przydzielP=new JMenuItem("Przydziel kurs");
static JMenuItem listaP=new JMenuItem("Lista prowadzących");
static JMenuItem wyszukajP=new JMenuItem("Wyszukaj");
JMenu menuKurs = new JMenu("Kurs ");
JMenuItem przydzielK=new JMenuItem("Przydziel prowadzącego");
static JMenuItem listaK=new JMenuItem("Lista kursów");
static JMenuItem wyszukajK=new JMenuItem("Wyszukaj");
JMenuItem wyjscie=new JMenuItem("Wyjście");
public menuPrzydzial(final RamkaMenuPrzydzial ramka, int rok)
{
menuProwadzacy.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//menuProwadzacy.add(przydzielP);
menuProwadzacy.add(listaP);
menuProwadzacy.add(wyszukajP);
pasekMenu.add(menuProwadzacy);
menuKurs.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//menuKurs.add(przydzielK);
menuKurs.add(listaK);
menuKurs.add(wyszukajK);
pasekMenu.add(menuKurs);
wyjscie.setFont(new Font("Times New Roman", Font.PLAIN, 18));
wyjscie.setMaximumSize(new Dimension(100,60));
pasekMenu.add(wyjscie);
.....
listaK.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
ramka.panel.removeAll();
<span style="color: red">System.out.println("ile razy");</span>
<span style="color: red">System.out.println("rok");</span>
panellK=new panelListaKursowPrzydzial(ramka.panel, null,s,r);
panellK.tab.filterText.requestFocus();
}
catch (Exception ee)
{
}
}
});
wyjscie.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
JComponent source = (JComponent)e.getSource();
Component root = SwingUtilities.getRoot(source);
JFrame frame = (JFrame)root;
frame.dispose();
frame=null;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
catch (Exception ee)
{
}
}
});
}
}</span>
Problem polega na tym, iż za każdym razem jak odpalę z menuGłównego menuPrzydział, wyjdę wybierając "wyjście", znowu odpalę menuPrzydział i wybiorę listaK to odpala się ona podwójnie-co widać poprzez wyświetlanie System.out.println("ile razy"); - wypisuje dwa razy, czyli tj są dwa okna czy panele (ale fizycznie jedno widoczne). Nie byłoby to problemem, gdyby nie to iż za każdym razem jak odpalam menuPrzydział to przekazywany jest tam aktualny parametr rok, który jest w panelListaKursowPrzydzial wyświetlany-wyświetla mi zawsze najstarszy-czyli tj pierwszy po uruchomieniu programu,np.
Odpalam program (menuGlowne), klikam menuPrzydział, nic na nim nie robie od razu klikam wyjście-zamyka się okno menuPrzydział, wybieram znowu menuPrzydział, znowu nic na nim nie robie tylko ej zamykam klikając wyjście, i znowu odpalam menuPrzydział wybieram listaK-wykonuje się 3 krotnie (bo System.out..... wyświetla mi w Eclipse 3 razy napis "ile razy" i 3 wartości pola rok w kolejności od tej która powinna być do tej która była przy pierwszym uruchomieniu-i równieżta wartość jest widoczna na panelu listaK-a musi być aktualna wartość.
Bardzo proszę o pomoc gdyż już nie mam pojęcia o co może chodzić, mam nadzieję że wytłumaczyłem problem wystarczająco. Będę wdzięczny za jakiekolwiek sugestie.
Pozdrawiam