Witam,
Mam stworzone jedno okno i dwa panele, jak w javie z pierwszego panelu mogę przełączyć się na drugi?

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Bardzo nieprecyzyjny opis problemu. Te dwa panele są widoczne, co w takiej sytuacji znaczy słowo przełączyć? Widać tylko jeden z nich, a chcesz pokazać ten drugi a pierwszy ukryć?
- Rejestracja:około 12 lat
- Ostatnio:ponad 9 lat
- Postów:99
Tak wygląda klasa okna
public class Main extends JFrame {
Main(){
setSize(600, 480);
setResizable(false);
setTitle("Java Gamae");
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MainPanel()); // ten jest widoczny
//add(new OptionPanel()); // na ten chcę przełączyc
}
public static void main(String[] args) {
Main window = new Main();
window.show();
}
}

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Jeśli masz rozkład BorderLayout, (a tak sugeruje zamieszczony kod), to
add(new OptionPanel());
validate();
repaint();
Przy okazji, metoda show() jest deprecated, zamień na setVisible(true).
- Rejestracja:około 12 lat
- Ostatnio:ponad 9 lat
- Postów:99
Kod klasy okna w w niej mam widoczny panel z klasy MyPanel
public class Main extends JFrame {
Main(){
setTitle("Java Gamae");
setSize(600, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
add(new OptionsPanel());
add(new MyPanel());
setVisible(true);
}
public static void main(String[] args) {
Main window = new Main();
window.setVisible(true);
}
}
Klasy MyPanel z której widok chcę przełączyć na Jpanel z klasy OptionsPanel
class MyPanel extends JPanel implements MouseListener, MouseMotionListener, KeyListener {
...
public MyPanel() {
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
initComponentM();
}
public void initComponentM(){
...
XButton op = new XButton("Options");
op.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
add(new OptionPanel());
validate();
repaint();
setVisible(true);
}
});
op.setComponentPosition(200, 100);
op.setComponentSize(200, 50);
op.setFontSize(15);
listComponentM.add(op);
...
}
Co jest źle że nie nie zmienia mi widoki na panel z klasy OptionsPanel?

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
public class Main extends JFrame {
MyPanel menuPanel = new MyPanel();
Main(){
setTitle("Java Gamae");
setSize(600, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
//add(new OptionsPanel());
add(menuPanel);
setVisible(true);
}
public static void main(String[] args) {
Main window = new Main();
window.setVisible(true);
}
}
....
XButton op = new XButton("Options");
op.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
remove(menuPanel); //tego brakowało, zapomniałem poprzednio
add(new OptionPanel());
validate();
repaint();
//setVisible(true);
}
});
- Rejestracja:około 12 lat
- Ostatnio:ponad 9 lat
- Postów:99
Chyba nie rozumiesz o co mi chodzi. Nie mogę stworzyć przycisku w tej klasie co dziedziczy z JFrame. Mam napisane własne kontrolki które rysują się na
panelu MyPanel i tylko w tym panelu działają i mogą być tworzone. W klasie Main nie mogę tworzyć żadnych przycisków i w tym jest problem.
Ewentualni muszę wywołać jakąś funkcję w MyPanel i odwołująca sie do klasy Main i zmienić panel na drugi. A tak powyższy sposób nie działa...

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
Sorry, czytałem Twój kod nieuważnie. Musiałbyś przekazać do klasy MyPanel (w konstruktorze) referencję do klasy Main - niech się ona nazywa mainFrame, a w obsłudze przycisku
mainFrame.remove(menuPanel);
mainFrame.add(new OptionPanel());
mainFrame.validate();
mainFrame.repaint();
- Rejestracja:około 12 lat
- Ostatnio:ponad 9 lat
- Postów:99
Nie bardzo rozumiem jak mam przekazać to referencję do do do klasy MyPanel.
Próbuję w taki sposób w konstruktorze klasy main
Main(){
...
menuPanel = new MyPanel(this);
add(menuPanel);
setVisible(true);
...
}
ale tak nie działa.
- Rejestracja:około 12 lat
- Ostatnio:ponad 9 lat
- Postów:99
Konstruktor klasy wygląda tak
MyPanel(Main menuPanel){
...
mainFrame.remove(menuPanel);
mainFrame.add(new OptionPanel());
mainFrame.validate();
mainFrame.repaint();
...
}
i wywala taki błąd
Error:(36, 18) java: variable menuPanel might not have been initialized