Salve,
studiando Java, in particolar modo Swing, mi trovo di fronte ad un problema che qui di seguito Vi espongo.
Volevo gentilmente chiederVi come caricare, se possibile, una nuova classe all'interno di un'azione di un JMenuItem, ovvero, da un menù a tendina, cliccando col mouse su una voce del menù, caricare di seguito una nuova classe che andrà a popolare una nuova pagina composta da vari elementi di swing, quali JPanel, JLabel, JTextField, JButton ecc...
La logica che sto seguendo è la seguente:
1) ho creato una prima classe, Main(), Che contine un JFrame ed un Container con layout di tipo BorderLayout(). Di seguito istanzio una prima pagina, pagina_1, passandogli come parametri il riferimento sia del JFrame che del Container.
package gui;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
public class Main {
static JFrame myjframe;
static Container mycontainer;
public static void main(String[] args) {
myjframe = new JFrame("PROVA MENU");
myjframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
myjframe.setSize(800, 600);
mycontainer = myjframe.getContentPane();
mycontainer.setLayout(new BorderLayout());
Pagina_1 p1 = new Pagina_1(myjframe, mycontainer);
myjframe.setVisible(true);
}
}
2) Nella classe Pagina_1, di segutio, creo un menu a tendina, tramite: JMenuBar; JMenu; e JMenuItem.
Con le voci: Pagina_2, Pagina_3, Pagina_4.
E lo inserisco all'interno di un JPanel, panel_1, posizionandolo nel Nord del Container.
Al Centro del Container, carico, infine, una JLabel
(new JLabel("Pagina_1");) all'interno di un JPanel, panel_2.
package gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Pagina_1 {
public Pagina_1(JFrame myjframe, Container mycontainer) {
JPanel panel_1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JMenuBar menuBar = new JMenuBar();
JMenu menuFile_1 = new JMenu("Menu_1");
menuBar.add(menuFile_1);
JMenuItem menu_item_1 = new JMenuItem("Pagina_2");
JMenuItem menu_item_2 = new JMenuItem("Pagina_3");
JMenuItem menu_item_3 = new JMenuItem("Pagina_4");
menuFile_1.add(menu_item_1);
menuFile_1.add(menu_item_2);
menuFile_1.add(menu_item_3);
JPanel panel_2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel label_1 = new JLabel("Pagina_1");
panel_2.add(label_1);
/* MENU LISTENERS */
menu_item_1.addActionListener(new Nuovepagine());
menu_item_2.addActionListener(new Nuovepagine());
menu_item_3.addActionListener(new Nuovepagine());
mycontainer.add(menuBar, BorderLayout.NORTH);
mycontainer.add(panel_2, BorderLayout.CENTER);
mycontainer.setVisible(true);
}
class Nuovepagine implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Selected: " + e.getActionCommand());
}
}
}
3) Ho creato infine, i Listeners, per ogni voce del menù.
Ora, però, non capisco come poter istanziare nuove classi, ovvero creare nuove pagine (come ad esempio, pagina_2, pagina_3, ecc...) cliccando sulle varie voci dei menù. E' possibile fare ciò? cambiare pagina tramite l'uso di un menù?