RISOLTO Quando clicco su bottoni del menu il panel non cambia

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Buon pomeriggio ho creato una schermata con menù e in base al pulsante premuto il frame deve cambiare ho fatto cosi:

Java:
package GuiFood;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

import Classi.Controller;

import javax.swing.JToolBar;
import javax.swing.JMenuBar;
import java.awt.CardLayout;
import javax.swing.JLayeredPane;


public class Menu extends JFrame implements ActionListener {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    protected Object frame1;
    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  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";
    
    

    public Menu(Controller ctrl) {
        setTitle("Login");
        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 = new JPanel();
        panel.setBackground(new Color(255, 140, 0));
        panel.setForeground(new Color(255, 140, 0));
        panel.setBounds(0, 0, 532, 41);
        getContentPane().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.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./ricerca.png")), 10, 10));
        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.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./filtri.png")), 21, 21));
        btnFiltri.setFocusable(false);
        btnFiltri.setBounds(416, 2, 108, 25);
        panel.add(btnFiltri);
        btnFiltri.addActionListener(this);
        btnFiltri.setActionCommand(Filtri_cmd);

            
        JPanel panel_2 = new JPanel();
        panel_2.setBackground(new Color(255, 165, 0));
        panel_2.setBounds(0, 41, 532, 58);
        getContentPane().add(panel_2);
        panel_2.setLayout(null);
        
            
        JToolBar menuBar = new JToolBar();
        menuBar.setBackground(new Color(255, 165, 0));
        menuBar.setBounds(0, 0, 518, 58);
        panel_2.add(menuBar);   

        JButton antipasti = new JButton("Anitpasti");
        antipasti.setForeground(new Color(255, 165, 0));
        antipasti.setBackground(new Color(250, 240, 230));
        antipasti.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(antipasti);
        antipasti.setFocusable(false);
        antipasti.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./antipasti.png")), 32, 32));
        antipasti.setPreferredSize(new Dimension(100,40));
        antipasti.addActionListener(this);
        antipasti.setActionCommand(Antipasti_cmd);


        JButton primi = new JButton("Primi");
        primi.setForeground(new Color(255, 165, 0));
        primi.setBackground(Color.WHITE);
        primi.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(primi);
        primi.setFocusable(false);
        primi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./primi.png")), 32, 32));
        primi.setPreferredSize(new Dimension(100,40));
        primi.addActionListener(this);
        primi.setActionCommand(Primi_cmd);

        
        JButton secondi = new JButton("Secondi");
        secondi.setForeground(new Color(255, 165, 0));
        secondi.setBackground(Color.WHITE);
        secondi.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(secondi);
        secondi.setFocusable(false);
        secondi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./secondi.png")), 32, 32));
        secondi.setPreferredSize(new Dimension(100,40));
        secondi.addActionListener(this);
        secondi.setActionCommand(Secondi_cmd);


        JButton contorni = new JButton("Contorni");
        contorni.setForeground(new Color(255, 165, 0));
        contorni.setBackground(Color.WHITE);
        contorni.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(contorni);
        contorni.setFocusable(false);
        contorni.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./contorni.png")), 32, 32));
        contorni.addActionListener(this);
        contorni.setActionCommand(Contorni_cmd);


        JButton dolci = new JButton("Dolci");
        dolci.setForeground(new Color(255, 165, 0));
        dolci.setBackground(Color.WHITE);
        dolci.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(dolci);
        dolci.setFocusable(false);
        dolci.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./dolci.png")), 32, 32));
        dolci.setPreferredSize(new Dimension(100,40));
        dolci.addActionListener(this);
        dolci.setActionCommand(Dolci_cmd);

        
        JButton bevande = new JButton("Bevande");
        bevande.setForeground(new Color(255, 165, 0));
        bevande.setBackground(Color.WHITE);
        bevande.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(bevande);
        bevande.setFocusable(false);
        bevande.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./bevande.png")), 32, 32));
        bevande.setPreferredSize(new Dimension(100,40));
        bevande.addActionListener(this);
        bevande.setActionCommand(Bevande_cmd);


        JPanel panel_3 = new JPanel();
        panel_3.setBackground(new Color(255, 140, 0));
        panel_3.setBounds(0, 99, 532, 382);
        getContentPane().add(panel_3);
        panel_3.setLayout(new CardLayout(0, 0));

            
        JPanel panel_1 = new JPanel();
        panel_1.setBackground(new Color(255, 165, 0));
        panel_1.setBounds(532, 0, 215, 481);
        getContentPane().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);
        completeOrder.setIcon(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(169, 3, 40, 32);
        panel_1.add(panel1);
        
        JMenuBar menuBar1 = new JMenuBar();
        panel1.add(menuBar1);
        
        JMenu Servizi = new JMenu("");
        menuBar1.add(Servizi);
        Servizi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Menu.png")), 18, 18));
        Servizi.addActionListener(this);

        
        JMenuItem ModificaProfilo = new JMenuItem("Modifica Profilo");
        ModificaProfilo.setIcon(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(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Uscire.png")), 25, 25));
        Uscire.addActionListener(this);
        Uscire.setActionCommand(Uscire_cmd);
    }
    
    static ImageIcon scaleImageIcon(ImageIcon image, int width, int height) {
        Image tmp = image.getImage();
        Image scaledImage = tmp.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH);
        ImageIcon scaledImageIcon = new ImageIcon(scaledImage);
        return scaledImageIcon;
    }

    
    @Override
    public void actionPerformed(ActionEvent e) {
            
            if(e.getActionCommand().equals(Filtri_cmd))
            {
                 // ctrl.Filtri(inserire stringa);
            }
            else if(e.getActionCommand().equals(Acquista_cmd))
            {
                ctrl.visualizzazioneFattura();
            }
            else if(e.getActionCommand().equals(ModificaProfilo_cmd))
            {
                  ctrl.ModificaProfilo();
            }
            else if(e.getActionCommand().equals(Uscire_cmd))     
            {
               if(JOptionPane.showConfirmDialog(null,"sicuro di voler uscire?")==0) {
                     ctrl.visualizzazioneLogin();     
               }
            }  else if(e.getActionCommand().equals(Antipasti_cmd))
            {
                  ctrl.visualizzazionePanelAntipasti();

            }  else if(e.getActionCommand().equals(Primi_cmd))
            {
                  ctrl.visualizzazionePanelPrimi();

            }   
         } 
    }
Ho creato i panel separatamente non i JPanel ma non mi funziona sapete aiutarmi?
Grazie mille
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
Ma non ti funziona, quale di quelli?
Comunque non mi sembra si possa usare un listener su un JMenu.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
perché cerchi di prelevare il comando dall'evento e con il codice
e.getActionCommand(); // errato: probabilmente non restituisce la stringa che ti aspetti (prova a stamparla e verifica)
e dopo chiami il metodo equals(), che opera su stringhe, ma su una stringa che non è quella che ti aspetti;
invece devi prelevare il nome del comando dalla sorgente dell'evento (un bottone); prova a sostituire quelle righe con
e.getSource().getActionCommand()
in questo modo prima viene identificata la sorgente con getSource(), poi viene prelevato il nome del comando (una stringa) con getActionCommand(), infine a questa stringa viene applicato il metodo equals()
 
Ultima modifica:

sare1234

Utente Attivo
262
3
perché cerchi di prelevare il comando dall'evento e con il codice
e.getActionCommand(); // errato: probabilmente non restituisce la stringa che ti aspetti (prova a stamparla e verifica)
e dopo chiami il metodo equals(), che opera su stringhe, ma su una stringa che non è quella che ti aspetti;
invece devi prelevare il nome del comando dalla sorgente dell'evento (un bottone); prova a sostituire quelle righe con
e.getSource().getActionCommand()
in questo modo prima viene identificata la sorgente con getSource(), poi viene prelevato il nome del comando (una stringa) con getActionCommand(), infine a questa stringa viene applicato il metodo equals()
mi esce errore si getActionCommand se inserisco :

Java:
            else if(e.getSource().getActionCommand().equals(Antipasti_cmd))
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
ok, prova quest'altra cosa:
metti la keyword static davanti alle stringhe dei comandi, esempio
private static String Antipasti_cmd = "Antipasti"; // ne ho preso uno a caso
sui bottoni dove imposti un comando, metti l'istruzione di settaggio comando prima dell'ascolatore di evento, esempio
fino ad ora hai fatto
Java:
 // inverti questi comandi
antipasti.addActionListener(this);
antipasti.setActionCommand(Antipasti_cmd);
cambialo in
Java:
// in questo modo
antipasti.setActionCommand(Antipasti_cmd); // questa è sempre da aggiungere
antipasti.addActionListener(this);
purtroppo sono un po' arrugginito con Swing, devo andare a tentativi. Strano però che il precedente codice restituisca errore perché il getActionCommando dovrebbe restituire la stringa comando settata per il bottone, comunque nel caso lascia e.getActionCommand()
 

sare1234

Utente Attivo
262
3
ok, prova quest'altra cosa:
metti la keyword static davanti alle stringhe dei comandi, esempio
private static String Antipasti_cmd = "Antipasti"; // ne ho preso uno a caso
sui bottoni dove imposti un comando, metti l'istruzione di settaggio comando prima dell'ascolatore di evento, esempio
fino ad ora hai fatto
Java:
 // inverti questi comandi
antipasti.addActionListener(this);
antipasti.setActionCommand(Antipasti_cmd);
cambialo in
Java:
// in questo modo
antipasti.setActionCommand(Antipasti_cmd); // questa è sempre da aggiungere
antipasti.addActionListener(this);
purtroppo sono un po' arrugginito con Swing, devo andare a tentativi. Strano però che il precedente codice restituisca errore perché il getActionCommando dovrebbe restituire la stringa comando settata per il bottone, comunque nel caso lascia e.getActionCommand()
Ti posto la parte di codice cosi puoi provarlo perche anche come mi hai detto non va:

Java:
package GuiFood;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

import Classi.Controller;

import javax.swing.JToolBar;
import javax.swing.JMenuBar;
import java.awt.CardLayout;
import javax.swing.JLayeredPane;


public class Menu extends JFrame implements ActionListener {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    protected Object frame1;
    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  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";   
    

    public Menu(Controller ctrl) {
        setTitle("Login");
        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 = new JPanel();
        panel.setBackground(new Color(255, 140, 0));
        panel.setForeground(new Color(255, 140, 0));
        panel.setBounds(0, 0, 532, 41);
        getContentPane().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.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./ricerca.png")), 10, 10));
        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.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./filtri.png")), 21, 21));
        btnFiltri.setFocusable(false);
        btnFiltri.setBounds(416, 2, 108, 25);
        panel.add(btnFiltri);
        btnFiltri.addActionListener(this);
        btnFiltri.setActionCommand(Filtri_cmd);

            
        JPanel panel_2 = new JPanel();
        panel_2.setBackground(new Color(255, 165, 0));
        panel_2.setBounds(0, 41, 532, 58);
        getContentPane().add(panel_2);
        panel_2.setLayout(null);
        
            
        JToolBar menuBar = new JToolBar();
        menuBar.setBackground(new Color(255, 165, 0));
        menuBar.setBounds(0, 0, 518, 58);
        panel_2.add(menuBar);   

        JButton antipasti = new JButton("Anitpasti");
        antipasti.setForeground(new Color(255, 165, 0));
        antipasti.setBackground(new Color(250, 240, 230));
        antipasti.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(antipasti);
        antipasti.setFocusable(false);
        antipasti.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./antipasti.png")), 32, 32));
        antipasti.setPreferredSize(new Dimension(100,40));
//        antipasti.addActionListener(this);
//        antipasti.setActionCommand(Antipasti_cmd);
        antipasti.setActionCommand(Antipasti_cmd);
        antipasti.addActionListener(this);


        JButton primi = new JButton("Primi");
        primi.setForeground(new Color(255, 165, 0));
        primi.setBackground(Color.WHITE);
        primi.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(primi);
        primi.setFocusable(false);
        primi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./primi.png")), 32, 32));
        primi.setPreferredSize(new Dimension(100,40));
//        primi.addActionListener(this);
//        primi.setActionCommand(Primi_cmd);
        primi.setActionCommand(Primi_cmd);
        primi.addActionListener(this);

        
        JButton secondi = new JButton("Secondi");
        secondi.setForeground(new Color(255, 165, 0));
        secondi.setBackground(Color.WHITE);
        secondi.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(secondi);
        secondi.setFocusable(false);
        secondi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./secondi.png")), 32, 32));
        secondi.setPreferredSize(new Dimension(100,40));
        secondi.addActionListener(this);
        secondi.setActionCommand(Secondi_cmd);


        JButton contorni = new JButton("Contorni");
        contorni.setForeground(new Color(255, 165, 0));
        contorni.setBackground(Color.WHITE);
        contorni.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(contorni);
        contorni.setFocusable(false);
        contorni.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./contorni.png")), 32, 32));
        contorni.addActionListener(this);
        contorni.setActionCommand(Contorni_cmd);


        JButton dolci = new JButton("Dolci");
        dolci.setForeground(new Color(255, 165, 0));
        dolci.setBackground(Color.WHITE);
        dolci.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(dolci);
        dolci.setFocusable(false);
        dolci.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./dolci.png")), 32, 32));
        dolci.setPreferredSize(new Dimension(100,40));
        dolci.addActionListener(this);
        dolci.setActionCommand(Dolci_cmd);

        
        JButton bevande = new JButton("Bevande");
        bevande.setForeground(new Color(255, 165, 0));
        bevande.setBackground(Color.WHITE);
        bevande.setFont(new Font("Lucida Grande", Font.PLAIN, 10));
        menuBar.add(bevande);
        bevande.setFocusable(false);
        bevande.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./bevande.png")), 32, 32));
        bevande.setPreferredSize(new Dimension(100,40));
        bevande.addActionListener(this);
        bevande.setActionCommand(Bevande_cmd);


        JPanel panel_3 = new JPanel();
        panel_3.setBackground(new Color(255, 140, 0));
        panel_3.setBounds(0, 99, 532, 382);
        getContentPane().add(panel_3);
        panel_3.setLayout(new CardLayout(0, 0));

            
        JPanel panel_1 = new JPanel();
        panel_1.setBackground(new Color(255, 165, 0));
        panel_1.setBounds(532, 0, 215, 481);
        getContentPane().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);
        completeOrder.setIcon(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(169, 3, 40, 32);
        panel_1.add(panel1);
        
        JMenuBar menuBar1 = new JMenuBar();
        panel1.add(menuBar1);
        
        JMenu Servizi = new JMenu("");
        menuBar1.add(Servizi);
        Servizi.setIcon(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Menu.png")), 18, 18));
        Servizi.addActionListener(this);

        
        JMenuItem ModificaProfilo = new JMenuItem("Modifica Profilo");
        ModificaProfilo.setIcon(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(scaleImageIcon(new ImageIcon(Menu.class.getResource("/Menu./Uscire.png")), 25, 25));
        Uscire.addActionListener(this);
        Uscire.setActionCommand(Uscire_cmd);
    }
    
    static ImageIcon scaleImageIcon(ImageIcon image, int width, int height) {
        Image tmp = image.getImage();
        Image scaledImage = tmp.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH);
        ImageIcon scaledImageIcon = new ImageIcon(scaledImage);
        return scaledImageIcon;
    }

    
    @Override
    public void actionPerformed(ActionEvent e) {
            
            if(e.getActionCommand().equals(Filtri_cmd))
            {
                 // ctrl.Filtri(inserire stringa);
            }
            else if(e.getActionCommand().equals(Acquista_cmd))
            {
                ctrl.visualizzazioneFattura();
            }
            else if(e.getActionCommand().equals(ModificaProfilo_cmd))
            {
                  ctrl.ModificaProfilo();
            }
            else if(e.getActionCommand().equals(Uscire_cmd))     
            {
               if(JOptionPane.showConfirmDialog(null,"sicuro di voler uscire?")==0) {
                     ctrl.visualizzazioneLogin();     
               }
            }  else if(e.getActionCommand().equals(Antipasti_cmd))

            {
                  ctrl.visualizzazionePanelAntipasti();
            }
            else if(e.getActionCommand().equals(Primi_cmd))
            {
                  ctrl.visualizzazionePanelPrimi();

            }   
         } 
    }

Java:
package Classi;

import java.awt.Point;
import java.awt.Window;
import java.sql.SQLException;

import Dao.*;
import GuiFood.*;

public class Controller {
    
    private panel_antipasti panelAntipasti;
    private panel_antipasti panelprimi;

    public Controller() {
        
        login = new Login(this);
        login.setVisible(true);
        login.setLocationRelativeTo(null);
      
    }
    
    
    
     public void visualizzazionePanelAntipasti() {
         panelAntipasti = new panel_antipasti(this);
         panelAntipasti.setVisible(true);
         panelAntipasti.setLocation(532, 382);

        
       }
    
     public void visualizzazionePanelPrimi() {
         panelprimi = new panel_antipasti(this);
         panelprimi.setVisible(true);
         panelprimi.setLocation(532, 382);

        
       }

Java:
public class panel_antipasti extends JPanel {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
     Controller ctrl;

    /**
     * Create the panel.
     */
    public panel_antipasti(Controller ctrl) {
        setBackground(Color.YELLOW);
        this.ctrl=ctrl;
        setBounds(0, 99, 532, 382);


    }


}

Java:
public class panel_primi extends JPanel {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    Controller ctrl;

    /**
     * Create the panel.
     */
    public panel_primi(Controller ctrl) {
        setBackground(SystemColor.textHighlight);
        setBounds(0, 99, 532, 382);
        this.ctrl=ctrl;
    }

}
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
fai un .zip della struttura completa di directory e file, perché col solo copia-incolla non riesco a compilare
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
Guarda che l'evento funziona...
Hai fatto un gran casino con i layout comunque, ti conviene guardare bene come si utilizzano.

Il problema è che non stai aggiornando il JFrame: dovresti rimuovere il contenuto, poi aggiungere il pannello, e fare un revalidate().

Apporta queste modifiche:
Java:
        if( e.getActionCommand().equals(Antipasti_cmd))
        {
              getContentPane().removeAll();
              ctrl.visualizzazionePanelAntipasti();
        }

Java:
     public void visualizzazionePanelAntipasti() {
         panelAntipasti = new panel_antipasti1(this);
         panelAntipasti.setVisible(true);
         panelAntipasti.setLocation(532, 382);
         menu.getContentPane().add(panelAntipasti);
         menu.revalidate();
         menu.repaint();
       }

Te l'ho un pò "buttato lì" per farti vedere.

EDIT:
il repaint() non dovrebbe servirti.
 
  • Mi piace
Reazioni: BAT e sare1234

sare1234

Utente Attivo
262
3
Guarda che l'evento funziona...
Hai fatto un gran casino con i layout comunque, ti conviene guardare bene come si utilizzano.

Il problema è che non stai aggiornando il JFrame: dovresti rimuovere il contenuto, poi aggiungere il pannello, e fare un revalidate().

Apporta queste modifiche:
Java:
        if( e.getActionCommand().equals(Antipasti_cmd))
        {
              getContentPane().removeAll();
              ctrl.visualizzazionePanelAntipasti();
        }

Java:
     public void visualizzazionePanelAntipasti() {
         panelAntipasti = new panel_antipasti1(this);
         panelAntipasti.setVisible(true);
         panelAntipasti.setLocation(532, 382);
         menu.getContentPane().add(panelAntipasti);
         menu.revalidate();
         menu.repaint();
       }

Te l'ho un pò "buttato lì" per farti vedere.

EDIT:
il repaint() non dovrebbe servirti.
ok grazie ma io vorrei che quando si preme su un bottone del menu il panel sottostante cambi ma non che apre un'altro frame...non so se mi sono spiegata
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
Ma l'hai provato? Non cambia il frame.
Se il panel non lo aggiungi al frame (al contentpane), non puoi visualizzarlo. Se vuoi cambiare il contenuto centrale devi utilizzare meglio i layout, visto che di fatto non li hai utilizzati.

Tu dovresti avere, idealmente, un panel sopra con il menu e uno sotto, che copre tutta l'altra area. Poi vai a rimpiazzare solo il panel che ti serve, che è quello centrale.
C'è già un layout atto allo scopo... https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html
Puoi dargli un occhio e implementarlo.

11 anni fa scrissi questo esempio (già... vecchiotto): https://pastebin.com/6VXi4H3A
Puoi provare a fare qualcosa di simile, come noti aggiungevo i campi a runtime.

Se avrò un pò di tempo, provo a darti qualche idea relativa al tuo codice, ma non so se riuscirò prima di sabato sera.
 
  • Mi piace
Reazioni: Mursey e sare1234

sare1234

Utente Attivo
262
3
Ma l'hai provato? Non cambia il frame.
Se il panel non lo aggiungi al frame (al contentpane), non puoi visualizzarlo. Se vuoi cambiare il contenuto centrale devi utilizzare meglio i layout, visto che di fatto non li hai utilizzati.

Tu dovresti avere, idealmente, un panel sopra con il menu e uno sotto, che copre tutta l'altra area. Poi vai a rimpiazzare solo il panel che ti serve, che è quello centrale.
C'è già un layout atto allo scopo... https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html
Puoi dargli un occhio e implementarlo.

11 anni fa scrissi questo esempio (già... vecchiotto): https://pastebin.com/6VXi4H3A
Puoi provare a fare qualcosa di simile, come noti aggiungevo i campi a runtime.

Se avrò un pò di tempo, provo a darti qualche idea relativa al tuo codice, ma non so se riuscirò prima di sabato sera.
Ho creato panel diversi per il menu ma comunque i panel che si rifanno ai bottoni del menu non mi funziono ancora
 

Allegati

  • Untitled.zip
    14.6 KB · Visualizzazioni: 25

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
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
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) {}
    }
}
 

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) {}
    }
}
si ok grazie....solo che siccome i panel a me dovranno contenere vari prodotti mi conviene farlo so più panel e poi aggiungerli al frame centrale giusto?
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!