RISOLTO Quando clicco su bottoni del menu il panel non cambia

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Non ho guardato quello che hai mandato, ti lascio un esempio che è simile al tuo caso.
Non utilizzo CardLayout, ma utilizzo - quasi - decentemente i Layout. Come noti un layout come il tuo non è complesso da realizzare, devi solo prendere dimestichezza con quelli che sono i Layout. Sono fondamentali se vuoi realizzare interfacce, ti conviene guardare il tutorial, ci sono esempi abbastanza chiari, con tanto di screenshot.

Quando pensi a un menu come il tuo, devi già immaginarti le sezioni, diciamo i "segmenti" che lo compongono. Tu hai di fatto 2 spazi, uno in alto e uno al centro, che copre tutto.
Quindi una cosa che puoi fare è usare 2 JPanel di base: uno che virrà posizionato a NORTH e uno CENTER. Quello a nord sarà il panel dedicato ai tuoi bottoni, quello centrato è il contenuto che cambia quando clicki sui bottoni.

Quando clicki un bottone andrai a rimuovere dal pannello contenitore, il panel che non ti serve, e aggiungi l'altro. Dovrai ovviamente fare un revalidate() sul pannello contenitore.

Codice scritto in una ventina di minuti, per farti l'esempio (non è sicuramente perfetto... non lo toccavo da anni, sono anche stupito nel ricordare ancora tutto senza consultare le doc!).
Come vedi puoi anche fare la verifica sull'evento in un modo diverso da quello che utilizzi tu.

Java:
import java.awt.BorderLayout;
import java.awt.Color;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;


class Example extends JFrame implements ActionListener {

    private JPanel  panel1,    // pannello in alto, menu bottoni
                    panel2,    // prima area visibile, centrale (azione su btn1)
                    panel3,    // seconda area visibile, centrale (azione su btn2)
                    container; // contenitore di panel2/panel3
                 
    private JButton btn1, btn2;
 
 
    Example() {
        super("Panel Example");
     
        // Contenuto "centrale" della finestra
        container = new JPanel(new BorderLayout());
     
        // Contenitore dei bottoni del menu, in alto
        // ----------------------------------------
        panel1 = new JPanel();
        panel1.setBackground(Color.WHITE);
        btn1 = new JButton("Panel 1");
        btn2 = new JButton("Panel 2");
     
        btn1.addActionListener(this);
        btn2.addActionListener(this);
     
        panel1.add(btn1);
        panel1.add(btn2);
        // ----------------------------------------
     
        // Label e pannelli, sono il contenuto
        JLabel lbl1 = new JLabel("PANEL 1");
        panel2 = new JPanel();
        panel2.setBackground(Color.CYAN);
        panel2.add(lbl1);
     
        JLabel lbl2 = new JLabel("PANEL 2");
        panel3 = new JPanel();
        panel3.setBackground(Color.ORANGE);
        panel3.add(lbl2);
     
        container.add(panel2);
        // ----------------------------------------
     
        // Posizionamento dei pannelli
        add(panel1, BorderLayout.NORTH);
        add(container, BorderLayout.CENTER);
     
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource() == btn1) {
            container.remove(panel3);
            container.add(panel2);
        }
        else if(ae.getSource() == btn2) {
            container.remove(panel2);
            container.add(panel3);
        }
        container.revalidate();
        container.repaint();
    }
 
    public static void makeGUI() {
        Example e = new Example();
        e.setSize(610,600);
        e.setResizable(false);
        e.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    makeGUI();
                }
            });
        } catch(Exception e) {}
    }
}
vedendo il tuo esempio ho provato a fare cosi ma non mi funziona lo stesso
Java:
package food2;

import java.awt.BorderLayout;
import java.awt.Color;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;



public class MENU4 extends JPanel implements ActionListener{

        /**
         *
         */
        private static final long serialVersionUID = 1L;
        private JTextField txtCosaPreferisciMangiare;
        private  String Acquista_cmd = "Acquista";
        private  String ModificaProfilo_cmd = "Modifica Profilo";
        private  String Uscire_cmd = "Uscire";
        private  String Filtri_cmd = "Filtri";
        
        Controller ctrl;
        
        private JPanel panel5;
        
        private JPanel panel_4,panel3,container;
      
        private JButton btn1, btn2;

        public MENU4(Controller ctrl) {
            setBackground(new Color(255, 165, 0));
            setBounds(100, 100, 747, 504);
            setLayout(null);
            this.ctrl=ctrl;

            
            JPanel panel = new JPanel();
            panel.setBackground(new Color(255, 140, 0));
            panel.setForeground(new Color(255, 140, 0));
            panel.setBounds(0, 0, 532, 41);
            add(panel);
            panel.setLayout(null);
                
                
            JSeparator separator_Ricerca = new JSeparator();
            separator_Ricerca.setForeground(Color.WHITE);
            separator_Ricerca.setBounds(6, 23, 248, 12);
            panel.add(separator_Ricerca);
            

            txtCosaPreferisciMangiare = new JTextField();
            txtCosaPreferisciMangiare.setText("Cosa preferisci mangiare?");
            txtCosaPreferisciMangiare.setSelectionColor(Color.LIGHT_GRAY);
            txtCosaPreferisciMangiare.setForeground(Color.BLACK);
            txtCosaPreferisciMangiare.setFont(new Font("Times New Roman", Font.ITALIC, 14));
            txtCosaPreferisciMangiare.setDisabledTextColor(Color.LIGHT_GRAY);
            txtCosaPreferisciMangiare.setColumns(10);
            txtCosaPreferisciMangiare.setBorder(null);
            txtCosaPreferisciMangiare.setBackground(new Color(255, 140, 0));
            txtCosaPreferisciMangiare.setBounds(6, 6, 248, 20);
            panel.add(txtCosaPreferisciMangiare);
            
                
            JButton btnCerca = new JButton("Cerca");
            btnCerca.setForeground(new Color(255, 165, 0));
            btnCerca.setFocusable(false);
            btnCerca.setBounds(255, 4, 79, 25);
            panel.add(btnCerca);
            btnCerca.addActionListener(this);

            
            JButton btnFiltri = new JButton("Filtri");
            btnFiltri.setForeground(new Color(255, 165, 0));
            btnFiltri.setFont(new Font("Lucida Grande", Font.PLAIN, 16));
            btnFiltri.setFocusable(false);
            btnFiltri.setBounds(416, 2, 108, 25);
            panel.add(btnFiltri);
            btnFiltri.addActionListener(this);
            btnFiltri.setActionCommand(Filtri_cmd);
              
            JLabel lbl2 = new JLabel("PANEL 2");
            panel5 = new JPanel();
            panel5.setBackground(Color.ORANGE);
            panel5.add(lbl2);
                
            JPanel panel_1 = new JPanel();
            panel_1.setBackground(new Color(255, 153, 51));
            panel_1.setBounds(532, 0, 215, 504);
            add(panel_1);
            panel_1.setLayout(null);
            
            JLabel username = new JLabel("Nickname Utente");
            username.setBounds(6, 19, 138, 16);
            panel_1.add(username);
            
            JSeparator separator_1 = new JSeparator();
            separator_1.setForeground(Color.WHITE);
            separator_1.setBounds(0, 34, 215, 12);
            panel_1.add(separator_1);


            JSeparator separator_2 = new JSeparator();
            separator_2.setForeground(Color.WHITE);
            separator_2.setBounds(0, 436, 215, 12);
            panel_1.add(separator_2);
            
            
            JButton completeOrder = new JButton("Acquista");
            completeOrder.setForeground(new Color(255, 165, 0));
            completeOrder.setBounds(63, 446, 99, 29);
            panel_1.add(completeOrder);
            completeOrder.setName("Acquista");
            completeOrder.addActionListener(this);
            completeOrder.setActionCommand(Acquista_cmd);
            
            
            
            JPanel panel1 = new JPanel();
            panel1.setBackground(new Color(255, 165, 0));
            panel1.setBounds(169, 3, 40, 32);
            panel_1.add(panel1);
            
            JMenuBar menuBar1 = new JMenuBar();
            panel1.add(menuBar1);
            
            JMenu Servizi = new JMenu("");
            menuBar1.add(Servizi);
            Servizi.addActionListener(this);

            
            JMenuItem ModificaProfilo = new JMenuItem("Modifica Profilo");
            Servizi.add(ModificaProfilo);
            ModificaProfilo.addActionListener(this);
            ModificaProfilo.setActionCommand(ModificaProfilo_cmd);
            
            JMenuItem Uscire = new JMenuItem("Uscire");
            Servizi.add(Uscire);
            Uscire.addActionListener(this);
            Uscire.setActionCommand(Uscire_cmd);
            
            
             container = new JPanel(new BorderLayout());
            
             panel1 = new JPanel();
             panel1.setBackground(Color.WHITE);
             btn1 = new JButton("Panel 1");
             btn1.setBounds(174, 5, 89, 29);
             btn2 = new JButton("Panel 2");
             btn2.setBounds(268, 5, 89, 29);
            
             btn1.addActionListener(this);
             btn2.addActionListener(this);
            
             JPanel panel_2 = new JPanel();
             panel_2.setBounds(0, 40, 532, 464);
             add(panel_2);
             panel_2.setLayout(null);
            
             panel_2.add(btn1);
             panel_2.add(btn2);
            
                
             JLabel lbl1 = new JLabel("PANEL 1");
             lbl1.setBounds(217, 19, 61, 16);
             JPanel panel_4 = new JPanel();
             panel_4.setBounds(6, 46, 520, 412);
             panel_2.add(panel_4);
             panel_4.setLayout(null);
             panel_4.add(lbl1);

            
             JLabel lbl21 = new JLabel("PANEL 2");
             lbl21.setBounds(0, 0, 61, 16);
             JPanel panel3 = new JPanel();
             panel3.setBounds(6, 46, 520, 412);
             panel_2.add(panel3);
             panel3.setLayout(null);
             panel3.add(lbl21);
            
             container.add(panel_4);


             add(panel1, BorderLayout.NORTH);
             add(container, BorderLayout.CENTER);
                              
         }
    
        
         public void actionPerformed(ActionEvent ae) {
                if(ae.getSource() == btn1) {
                    container.remove(panel3);
                    container.add(panel_4);
                }
                else if(ae.getSource() == btn2) {
                    container.remove(panel_4);
                    container.add(panel3);
                }
                container.revalidate();
                container.repaint();
            }
                
}
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Rimanda tutto completo, dopo la tua modifica, così posso provarlo.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Devi stare attenta quando fai le cose... soprattutto ora che sono ancora semplici...
Innanzitutto viene lanciata una NullPointerException alla riga 208 del file Menu1. E' causata evidentemente dal fatto che hai definito "panel_4" come variabile di istanza (o variabile di classe, non so come le chiami) e che all'interno - attorno alla riga 178 - la definisci nuovamente. Stesso discorso per "panel3".

Inserisci questo nel file Menu1, altrimenti non gestisci correttamente la chiusura della finestra:
Java:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Comunque ciò che hai scritto è come minimo difficile da capire...
Dovresti iniziare a dare nomi sensati alle cose e dare un'impostazione almeno sensata al modo in cui inizializzi gli elementi. Qui sembra che hai messo dentro cose tanto per...

Java:
             JPanel panel_2 = new JPanel();
             panel_2.setBounds(0, 40, 532, 464);
             add(panel_2);
             panel_2.setLayout(null);
           
             panel_2.add(btn1);
             panel_2.add(btn2);
                           
             JLabel lbl1 = new JLabel("PANEL 1");
             lbl1.setBounds(217, 19, 61, 16);
             panel_4 = new JPanel();
             panel_4.setBounds(6, 46, 520, 412);
             panel_2.add(panel_4);
             panel_4.setLayout(null);
             panel_4.add(lbl1);
           
             JLabel lbl21 = new JLabel("PANEL 2");
             lbl21.setBounds(0, 0, 61, 16);
             panel3 = new JPanel();
             panel3.setBounds(6, 46, 520, 412);
             panel_2.add(panel3);
             panel3.setLayout(null);
             panel3.add(lbl21);

Per questo motivo evito di sistemarti il codice... lascio a te il debug, o la riscrittura (secondo me, in questi casi, si fa prima; il mio esempio che vedrai qui sotto l'ho realizzato in 40 minuti circa).

Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Color;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;


class Example extends JFrame implements ActionListener {

    private JPanel  panelMenu,    // pannello in alto, menu bottoni
                    panelContent1,    // prima area visibile, centrale (azione su btn1)
                    panelContent2,    // seconda area visibile, centrale (azione su btn2)
                    container; // contenitore di panelContent1/panelContent2
                   
    private JButton btn1, btn2, btnSearch;
    private JTextField search;
   
    Example() {
        super("Panel Example");
       
        // Contenuto "centrale" della finestra
        container = new JPanel(new BorderLayout());
       
        // Contenitore dei bottoni del menu, in alto
        // ----------------------------------------
       
        // 2 righe: campo di testo e bottone | bottoni che cambiano pannelli
        panelMenu = new JPanel(new GridLayout(2,0));
       
        JPanel panelBtn = new JPanel();
        panelBtn.setBackground(new Color(241,123,3));

        btn1 = new JButton("Panel 1");
        btn2 = new JButton("Panel 2");
       
        btn1.addActionListener(this);
        btn2.addActionListener(this);

        JPanel panelText = new JPanel();
        panelText.setBackground(new Color(241,123,3));
       
        search = new JTextField();
        search.setText("Cosa vuoi cercare?");
        btnSearch = new JButton("Cerca");
       
        // aggiunta bottoni al pannello
        panelBtn.add(btn1);
        panelBtn.add(btn2);
       
        // Aggiunta bottone e textfield al pannello
        panelText.add(search);
        panelText.add(btnSearch);
       
        // aggiunta pannelli precedenti al menu globale
        panelMenu.add(panelText);
        panelMenu.add(panelBtn);
       
        // ----------------------------------------
       
        // Label e pannelli, sono il contenuto
        JLabel lbl1 = new JLabel("PANEL 1");
        panelContent1 = new JPanel();
        panelContent1.setBackground(Color.CYAN);
        panelContent1.add(lbl1);
       
        JLabel lbl2 = new JLabel("PANEL 2");
        panelContent2 = new JPanel();
        panelContent2.setBackground(Color.ORANGE);
        panelContent2.add(lbl2);
       
        container.add(panelContent1);
        // ----------------------------------------
   
        // pannello di destra   
        JPanel rightPanel = new JPanel();
        rightPanel.setBackground(Color.ORANGE);
       
        JButton btnRight = new JButton("TEST BUTTON");
        rightPanel.add(btnRight);
       
        // globale, contiene a nord il pannello con la ricerca e il menu
        // al centro il contenuto che cambia (panelContent1, panelContent2)
        JPanel globalContainer = new JPanel(new BorderLayout());
        globalContainer.add(panelMenu, BorderLayout.NORTH);
        globalContainer.add(container, BorderLayout.CENTER);
       
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, globalContainer, rightPanel);
        splitPane.setContinuousLayout(true);
        splitPane.setDividerLocation(500);
          
          
        // aggiunta splitpane al JFrame
        add(splitPane);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource() == btn1) {
            container.remove(panelContent2);
            container.add(panelContent1);
        }
        else if(ae.getSource() == btn2) {
            container.remove(panelContent1);
            container.add(panelContent2);
        }
        container.revalidate();
        container.repaint();
    }
   
    public static void makeGUI() {
        Example e = new Example();
        e.setSize(710,650);
        e.setResizable(false);
        e.setVisible(true);
    }
 
    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    makeGUI();
                }
            });
        } catch(Exception e) {}
    }
}

Ho apportato qualche variazione, è simile al tuo ora (almeno come impostazione grafica).

gui_sw.png

Guarda un pò i layout che ho utilizzato e i componenti.
In sintesi è composto così:
- pannello che contiene il campo di ricerca e il bottone di ricerca
- pannello che contiene i bottoni panel1 e panel2
- pannello che fa da contenitore per i pannelli appena citati (chiamato panelMenu), usa un GridLayout
- pannelli panel1 e panel2, che cambiano clickando i pulsanti
- pannello a destra, verticale

Il panelMenu e il pannello chiamato anche prima container vengono inseriti in un pannello chiamato "globalContainer".
Il globalContainer e il pannello di destra vengono poi aggiunti al JSplitPane.
Infine il JSplitPane viene aggiunto alla finestra.

Il codice dovrebbe essere comunque abbastanza comprensibile.
 

sare1234

Utente Attivo
262
3
ok grazie mille ma con il flowlayout non posso spostare gli oggetti?se si come?
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;

import Classi.Controller;


import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JTextField;
import javax.swing.JSeparator;
import javax.swing.JButton;


import javax.swing.JMenuBar;




public class Menu extends JFrame implements ActionListener,MouseListener {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    protected Object frame1;
    private  String Acquista_cmd = "Acquista";
    private  String ModificaProfilo_cmd = "Modifica Profilo";
    private  String Uscire_cmd = "Uscire";
    private  String Filtri_cmd = "Filtri";
  
    Controller ctrl;
    
    private  String Antipasti_cmd = "Antipasti";
    private  String Primi_cmd = "Primi";
    private  String Secondi_cmd = "Secondi";
    private  String Contorni_cmd = "Contorini";
    private  String Dolci_cmd = "Dolci";
    private  String Bevande_cmd = "Bevande";
    
    private Component panel_4;
    private Component panel_3;
    
    private JTextField txtCosaPreferisciMangiare;
    private JTextField textField;
    private JFrame panel;
    private JPanel container;
    private Component panelContent2;
    private Component panelContent1;
    private Component panel_2;
    private Object antipasti;
    private Object primi;
    private JFrame conteiner;



    public Menu(Controller ctrl) {
        setTitle("Menù");
        this.getContentPane().setBackground(new Color(255, 165, 0));
        this.setResizable(false);
        this.setBounds(100, 100, 747, 504);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setLayout(null);
        this.ctrl=ctrl;
                
            
        JPanel panel_1 = new JPanel();
        panel_1.setBackground(new Color(255, 165, 0));
        panel_1.setBounds(559, 0, 188, 481);
        getContentPane().add(panel_1);
        panel_1.setLayout(null);
        
        JLabel username = new JLabel("Nickname Utente");
        username.setBounds(0, 22, 138, 16);
        panel_1.add(username);
        
        JSeparator separator_1 = new JSeparator();
        separator_1.setForeground(Color.WHITE);
        separator_1.setBounds(0, 34, 188, 12);
        panel_1.add(separator_1);


        JSeparator separator_2 = new JSeparator();
        separator_2.setForeground(Color.WHITE);
        separator_2.setBounds(0, 436, 188, 12);
        panel_1.add(separator_2);
        
        
        JButton completeOrder = new JButton("Acquista");
        completeOrder.setForeground(new Color(255, 165, 0));
        completeOrder.setBounds(63, 446, 99, 29);
        completeOrder.setIcon(ctrl.scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./carrello.png")), 25, 25));
        panel_1.add(completeOrder);
        completeOrder.setName("Acquista");
        completeOrder.addActionListener(this);
        completeOrder.setActionCommand(Acquista_cmd);
        
        
        JPanel panel1 = new JPanel();
        panel1.setBackground(new Color(255, 165, 0));
        panel1.setBounds(146, 6, 36, 32);
        panel_1.add(panel1);
        
        JMenuBar menuBar1 = new JMenuBar();
        panel1.add(menuBar1);
        
        JMenu Servizi = new JMenu("");
        menuBar1.add(Servizi);
        Servizi.setIcon(ctrl.scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Menu.png")), 18, 18));
        Servizi.addActionListener(this);

        
        JMenuItem ModificaProfilo = new JMenuItem("Modifica Profilo");
        ModificaProfilo.setIcon(ctrl.scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Modifica.png")), 20, 20));
        Servizi.add(ModificaProfilo);
        ModificaProfilo.addActionListener(this);
        ModificaProfilo.setActionCommand(ModificaProfilo_cmd);

        
        JMenuItem Uscire = new JMenuItem("Uscire");
        Servizi.add(Uscire);
        Uscire.setIcon(ctrl.scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Uscire.png")), 25, 25));
        Uscire.addActionListener(this);
        Uscire.setActionCommand(Uscire_cmd);

                
        JPanel globalContainer = new JPanel();
        globalContainer.setBounds(0, 0, 560, 481);
        getContentPane().add(globalContainer);
        globalContainer.setLayout(null);
      
        
        JPanel panelMenu = new JPanel();
        panelMenu.setBounds(0, 0, 560, 111);
        globalContainer.add(panelMenu);
        panelMenu.setLayout(null);
        
        JPanel panelText = new JPanel();
        panelText.setBackground(new Color(255, 140, 0));
        panelText.setBounds(0, 0, 560, 51);
        panelMenu.add(panelText);
        panelText.setLayout(null);
        
        JSeparator separator_Ricerca = new JSeparator();
        separator_Ricerca.setForeground(Color.WHITE);
        separator_Ricerca.setBounds(6, 33, 248, 12);
        panelText.add(separator_Ricerca);
        
        textField = new JTextField();
        textField.setText("Cosa preferisci mangiare?");
        textField.setSelectionColor(Color.LIGHT_GRAY);
        textField.setForeground(Color.BLACK);
        textField.setFont(new Font("Times New Roman", Font.ITALIC, 14));
        textField.setDisabledTextColor(Color.LIGHT_GRAY);
        textField.setColumns(10);
        textField.setBorder(null);
        textField.setBackground(new Color(255, 140, 0));
        textField.setBounds(6, 6, 248, 28);
        panelText.add(textField);
        
        JButton btnCerca = new JButton("Cerca");
        btnCerca.setForeground(new Color(255, 165, 0));
        btnCerca.setFocusable(false);
        btnCerca.setBounds(253, 6, 79, 25);
        panelText.add(btnCerca);

        
        JButton btnFiltri = new JButton("Filtri");
        btnFiltri.setForeground(new Color(255, 165, 0));
        btnFiltri.setFont(new Font("Lucida Grande", Font.PLAIN, 16));
        btnFiltri.setFocusable(false);
        btnFiltri.setActionCommand("Filtri");
        btnFiltri.setBounds(446, 6, 108, 25);
        panelText.add(btnFiltri);
        
        JPanel panelBtn = new JPanel();
        panelBtn.setBackground(new Color(255, 140, 0));
        panelBtn.setBounds(0, 50, 560, 61);
        panelMenu.add(panelBtn);
        panelBtn.setLayout(null);
        
        JButton antipasti = new JButton("Antipasti");
        antipasti.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        antipasti.setActionCommand("Antipasti");
        antipasti.setBounds(6, 6, 102, 39);
        panelBtn.add(antipasti);
        antipasti.addActionListener(this);

        
        JButton primi = new JButton("primi");
        primi.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        primi.setActionCommand("Primi");
        primi.setBounds(107, 6, 84, 39);
        panelBtn.add(primi);
        primi.addActionListener(this);

        
        JButton secondi = new JButton("secondi");
        secondi.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        secondi.setActionCommand("Secondi");
        secondi.setBounds(189, 6, 96, 39);
        panelBtn.add(secondi);
        
        JButton contorni = new JButton("contorni");
        contorni.setActionCommand("Contorini");
        contorni.setBounds(284, 5, 96, 39);
        panelBtn.add(contorni);
        
        JButton dolci = new JButton("dolci");
        dolci.setActionCommand("Dolci");
        dolci.setBounds(379, 5, 84, 39);
        panelBtn.add(dolci);
        
        JButton bevande = new JButton("bevande");
        bevande.setActionCommand("Bevande");
        bevande.setBounds(464, 5, 90, 39);
        panelBtn.add(bevande);
        
        JPanel conteiner = new JPanel();
        conteiner.setBounds(0, 111, 560, 370);
        globalContainer.add(conteiner);
        conteiner.setLayout(null);
        
        JPanel panelContent1 = new JPanel();
        panelContent1.setBackground(new Color(30, 144, 255));
        panelContent1.setBounds(0, 0, 560, 370);
        panelContent1.setLayout(null);
        
        JLabel lbl1 = new JLabel("New label1");
        lbl1.setBounds(215, 18, 78, 16);
        panelContent1.add(lbl1);
        
        JPanel  panelContent2 = new JPanel();
        panelContent2.setBounds(0, 0, 560, 370);
        
        JLabel lbl2 = new JLabel("New label1");
        lbl2.setBounds(215, 18, 78, 16);
        panelContent2.add(lbl2);
        
        conteiner.add(panelContent1);

        globalContainer.add(panelMenu, BorderLayout.NORTH);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        
    
    }
    
     public void actionPerformed(ActionEvent ae) {
            if(ae.getSource( )== antipasti) {
                conteiner.remove(panel_2);
                conteiner.getContentPane().add(panelContent1);
              
            }
            
            else if(ae.getSource()== primi) {
                conteiner.remove(panelContent1);
                conteiner.getContentPane().add(panel_2);
                
              }
            
            conteiner.revalidate();
            conteiner.repaint();
              
            }
          
    

    @Override
    public void mouseClicked(MouseEvent e) {
        txtCosaPreferisciMangiare.setText("");     
    }

    @Override
    public void mousePressed(MouseEvent e) {
        
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        
    }

    @Override
    public void mouseExited(MouseEvent e) {
        
    }
}
Da errore su:
conteiner.revalidate();
conteiner.repaint();
come posso risolvere?
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Che errore ti dà?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Stai dichiarando nuovamente container.
 

sare1234

Utente Attivo
262
3
Stai dichiarando nuovamente container.
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;

import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JTextField;
import javax.swing.JSeparator;
import javax.swing.JButton;

import javax.swing.JMenuBar;

public class Menu1 extends JFrame implements ActionListener,MouseListener {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    protected Object frame1;
    private  String Acquista_cmd = "Acquista";
    private  String ModificaProfilo_cmd = "Modifica Profilo";
    private  String Uscire_cmd = "Uscire";
    private  String Filtri_cmd = "Filtri";
 
    Controller ctrl;
    
    private  String Antipasti_cmd = "Antipasti";
    private  String Primi_cmd = "Primi";
    private  String Secondi_cmd = "Secondi";
    private  String Contorni_cmd = "Contorini";
    private  String Dolci_cmd = "Dolci";
    private  String Bevande_cmd = "Bevande";
    
 
    
    private JTextField txtCosaPreferisciMangiare;
    private JTextField textField;
    private JPanel panelContent2;
    private JPanel panelContent1;
    private JPanel container;
    private JButton antipasti;
    private JButton primi;



    public Menu1(Controller ctrl) {
        setTitle("Menù");
        this.getContentPane().setBackground(new Color(255, 165, 0));
        this.setResizable(false);
        this.setBounds(100, 100, 747, 504);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setLayout(null);
        this.ctrl=ctrl;
                
            
        JPanel panel_1 = new JPanel();
        panel_1.setBackground(new Color(255, 165, 0));
        panel_1.setBounds(559, 0, 188, 481);
        getContentPane().add(panel_1);
        panel_1.setLayout(null);
        
        JLabel username = new JLabel("Nickname Utente");
        username.setBounds(0, 22, 138, 16);
        panel_1.add(username);
        
        JSeparator separator_1 = new JSeparator();
        separator_1.setForeground(Color.WHITE);
        separator_1.setBounds(0, 34, 188, 12);
        panel_1.add(separator_1);


        JSeparator separator_2 = new JSeparator();
        separator_2.setForeground(Color.WHITE);
        separator_2.setBounds(0, 436, 188, 12);
        panel_1.add(separator_2);
        
        
        JButton completeOrder = new JButton("Acquista");
        completeOrder.setForeground(new Color(255, 165, 0));
        completeOrder.setBounds(63, 446, 99, 29);
        panel_1.add(completeOrder);
        completeOrder.setName("Acquista");
        completeOrder.addActionListener(this);
        completeOrder.setActionCommand(Acquista_cmd);
        
        
        JPanel panel1 = new JPanel();
        panel1.setBackground(new Color(255, 165, 0));
        panel1.setBounds(146, 6, 36, 32);
        panel_1.add(panel1);
        
        JMenuBar menuBar1 = new JMenuBar();
        panel1.add(menuBar1);
        
        JMenu Servizi = new JMenu("");
        menuBar1.add(Servizi);
        Servizi.addActionListener(this);

        
        JMenuItem ModificaProfilo = new JMenuItem("Modifica Profilo");
        Servizi.add(ModificaProfilo);
        ModificaProfilo.addActionListener(this);
        ModificaProfilo.setActionCommand(ModificaProfilo_cmd);

        
        JMenuItem Uscire = new JMenuItem("Uscire");
        Servizi.add(Uscire);
        Uscire.addActionListener(this);
        Uscire.setActionCommand(Uscire_cmd);

                
        JPanel globalContainer = new JPanel();
        globalContainer.setBounds(0, 0, 560, 481);
        getContentPane().add(globalContainer);
        globalContainer.setLayout(null);
      
        
        JPanel panelMenu = new JPanel();
        panelMenu.setBounds(0, 0, 560, 111);
        globalContainer.add(panelMenu);
        panelMenu.setLayout(null);
        
        JPanel panelText = new JPanel();
        panelText.setBackground(new Color(255, 140, 0));
        panelText.setBounds(0, 0, 560, 51);
        panelMenu.add(panelText);
        panelText.setLayout(null);
        
        JSeparator separator_Ricerca = new JSeparator();
        separator_Ricerca.setForeground(Color.WHITE);
        separator_Ricerca.setBounds(6, 33, 248, 12);
        panelText.add(separator_Ricerca);
        
        textField = new JTextField();
        textField.setText("Cosa preferisci mangiare?");
        textField.setSelectionColor(Color.LIGHT_GRAY);
        textField.setForeground(Color.BLACK);
        textField.setFont(new Font("Times New Roman", Font.ITALIC, 14));
        textField.setDisabledTextColor(Color.LIGHT_GRAY);
        textField.setColumns(10);
        textField.setBorder(null);
        textField.setBackground(new Color(255, 140, 0));
        textField.setBounds(6, 6, 248, 28);
        panelText.add(textField);
        
        JButton btnCerca = new JButton("Cerca");
        btnCerca.setForeground(new Color(255, 165, 0));
        btnCerca.setFocusable(false);
        btnCerca.setBounds(253, 6, 79, 25);
        panelText.add(btnCerca);

        
        JButton btnFiltri = new JButton("Filtri");
        btnFiltri.setForeground(new Color(255, 165, 0));
        btnFiltri.setFont(new Font("Lucida Grande", Font.PLAIN, 16));
        btnFiltri.setFocusable(false);
        btnFiltri.setActionCommand("Filtri");
        btnFiltri.setBounds(446, 6, 108, 25);
        panelText.add(btnFiltri);
        
        JPanel panelBtn = new JPanel();
        panelBtn.setBackground(new Color(255, 140, 0));
        panelBtn.setBounds(0, 50, 560, 61);
        panelMenu.add(panelBtn);
        panelBtn.setLayout(null);
        
        JButton antipasti = new JButton("Antipasti");
        antipasti.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        antipasti.setActionCommand("Antipasti");
        antipasti.setBounds(6, 6, 102, 39);
        panelBtn.add(antipasti);
        antipasti.addActionListener(this);

        
        JButton primi = new JButton("primi");
        primi.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        primi.setActionCommand("Primi");
        primi.setBounds(107, 6, 84, 39);
        panelBtn.add(primi);
        primi.addActionListener(this);

        
        JButton secondi = new JButton("secondi");
        secondi.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
        secondi.setActionCommand("Secondi");
        secondi.setBounds(189, 6, 96, 39);
        panelBtn.add(secondi);
        
        JButton contorni = new JButton("contorni");
        contorni.setActionCommand("Contorini");
        contorni.setBounds(284, 5, 96, 39);
        panelBtn.add(contorni);
        
        JButton dolci = new JButton("dolci");
        dolci.setActionCommand("Dolci");
        dolci.setBounds(379, 5, 84, 39);
        panelBtn.add(dolci);
        
        JButton bevande = new JButton("bevande");
        bevande.setActionCommand("Bevande");
        bevande.setBounds(464, 5, 90, 39);
        panelBtn.add(bevande);
        
        panelMenu.add(panelBtn);
        
        JPanel container = new JPanel();
        container.setBounds(0, 111, 560, 370);
        globalContainer.add(container);
        container.setLayout(null);
        
        JPanel panelContent1 = new JPanel();
        panelContent1.setBackground(new Color(30, 144, 255));
        panelContent1.setBounds(0, 0, 560, 370);
        panelContent1.setLayout(null);
        
        JLabel lbl1 = new JLabel("New label1");
        lbl1.setBounds(215, 18, 78, 16);
        panelContent1.add(lbl1);
        
        JPanel  panelContent2 = new JPanel();
        panelContent2.setBounds(0, 0, 560, 370);
        
        JLabel lbl2 = new JLabel("New label1");
        lbl2.setBounds(215, 18, 78, 16);
        panelContent2.add(lbl2);

        
        container.add(panelContent1);
        

        globalContainer.add(container, BorderLayout.NORTH);

        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        
    
    }
    
     public void actionPerformed(ActionEvent ae) {
            if(ae.getSource( ) == antipasti) {
                container.remove(panelContent2);
                container.add(panelContent1);
              
            }
            
            else if(ae.getSource() == primi) {
                   container.remove(panelContent1);
                   container.add(panelContent2);
                
              }
            
            container.revalidate();
            container.repaint();
              
            }
          
    

    @Override
    public void mouseClicked(MouseEvent e) {
        txtCosaPreferisciMangiare.setText("");     
    }

    @Override
    public void mousePressed(MouseEvent e) {
        
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        
    }

    @Override
    public void mouseExited(MouseEvent e) {
        
    }
}

Ma neanche cosi va ed ho sempre lo stesso errore non capisco dove sbaglio
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ti prego guarda bene che stai scrivendo...
Lo vedo io da telefono, quindi da pc usando un IDE dovrebbe essere immediato.

In cima fai

Java:
private JPanel container;

Che è corretto.

Poi sotto fai:

Java:
JPanel container = new JPanel();

Quindi... perché la NullPointer nell'actionPerformed?

Perché lì usi la variabile di istanza, che essendo un oggetto di default è null. Devi togliere JPanel dentro al costruttore, perché altrimenti stai creando un panel di nome container, che esiste solo nel costruttore, e la variabile di istanza rimane null.

È lo steso errore che facevi con panel4 che ti ho corretto sopra.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!