Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Sovrascrivere JPanel

  1. #1

    Sovrascrivere JPanel

    Salve a tutti ho il seguente problema;ho un interfaccia grafica costituita da due pannelli che per semplicità indicherò con pannello1 e pannello2; inseriti all'interno dello stesso pannello principale(Pannello_principale); in pratica nel pannello1 ho una serie di bottoni ed in base al bottone che io vado a premere; nel pannello2 viene aggiunto un pannello diverso; ad esempio se clicco sul bottone inserisci sotto mi viene visualizzato il pannello di inserimento.Il problema è che quando clicco sul secondo pulsante il pannello2 non viene sovrascritto ma praticamente mi viene aggiunta l'interfaccia sotto a quella precedente.
    Come posso risolvere il problema???Il problema è che il container è unico ed è a questo che io ho aggiunto il pannello principale.
    Io vorrei in pratica che ogni volta che io clicco su un pulsante del pannello1; il pannello2 venisse sovrascritto con il nuovo pannello associato a quel pulsante.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Sovrascrivere JPanel

    Originariamente inviato da identikit_man
    Io vorrei in pratica che ogni volta che io clicco su un pulsante del pannello1; il pannello2 venisse sovrascritto con il nuovo pannello associato a quel pulsante.
    Le possibilità sono almeno due:

    1) rimozione fisica vecchio pannello e inserimento fisico nuovo pannello. In pratica sul Pannello_principale fai un remove per rimuovere il "vecchio" pannello2 e poi fai un add per inserire il "nuovo" pannello2. Devi anche rivalidare il layout, tipicamente con un validate() su Pannello_principale (perlomeno con i layout manager più semplici). Ci potrebbero essere altre questioni critiche di layout: ad esempio il nuovo pannello è più grande e potrebbe essere necessario fare anche altro se vuoi che la finestra si "adatti".

    2) Usare CardLayout. Il tuo pannello2 dovrebbe avere un CardLayout. Poi in pannello2 inserisci i vari pannelloA, pannelloB, pannelloC ..... Poi cambi il pannello solamente con il show di CardLayout.
    Questa soluzione è la più valida se: a) i pannelli non sono tanti, b) li conosci a priori/istanzi già tutti all'inizio, c) hanno dimensioni varie e non vuoi preoccuparti più di tanto di questo (CardLayout calcola il max tra tutti).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Faccio prima forse se posto il codice del programma:
    codice:
    public class Impiegato extends JFrame implements ActionListener
    {
    	private Socket cliente;
    	private JPanel $pannello_principale,$pannello1,$pannello2,$pannello_bottoni;
    	private JButton $button1,$button2,$button3,$button4,$button5,$button6,$button7;
    	private Container $cont;
    	private ObjectOutputStream oos;
    	private ObjectInputStream ois;
    	private LinkedList<String> lista_persone_coinvolte;
    	private JTextField $inserimento_id,$inserimento_persona,$inserimento_data,$ricerca_inserimento_id;
    	private JComboBox $selezione_tipo,$selezione_stato;
    	private JLabel $testo1,$testo2,$testo3,$testo4,$testo5,$testo6;
    	public Impiegato()
    	{
    		this.avvia();
    		$cont=this.getContentPane();
    		$pannello_principale=this.creaPannello();
    		$cont.add($pannello_principale);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setSize(1000,500);
    	}
    	public JPanel creaPannello()
    	{
    		$pannello1=new JPanel();
    		$pannello2=new JPanel();
    		$pannello_bottoni=new JPanel();
    		
    		$button1=new JButton("Inserisci pratica");
    		$button1.setActionCommand("INSERISCI");
    		$button1.addActionListener(this);
    		$button1.setSize(100,100);
    		
    		$button2=new JButton("Cerca pratica per id");
    		$button2.setActionCommand("RICERCA_PRATICA_ID");
    		$button2.addActionListener(this);
    		$button2.setSize(100,100);
    		
    		$button3=new JButton("Cerca pratica per persona coinvolta");
    		$button3.setActionCommand("RICERCA_PERSONE");
    		$button3.addActionListener(this);
    		$button3.setSize(100,100);
    		
    		$button4=new JButton("Modifica stato pratica");
    		$button4.setActionCommand("MODIFICA_STATO");
    		$button4.addActionListener(this);
    		$button4.setSize(100,100);
    		
    		$button5=new JButton("Cerca pratica per stato");
    		$button5.setActionCommand("CERCA_PER_STATO");
    		$button5.addActionListener(this);
    		$button5.setSize(100,100);
    		
    		$button6=new JButton("Visualizza percentuale pratica in attesa di giudizio");
    		$button6.setActionCommand("CERCA_PRATICHE_GIUDIZIO");
    		$button6.addActionListener(this);
    		$button6.setSize(100,100);
    		
    		$button7=new JButton("Conteggia pratiche");
    		$button7.setActionCommand("CONTEGGIO");
    		$button7.addActionListener(this);
    		$button7.setSize(100,100);
    		
    		$pannello_bottoni.add($button1);
    		$pannello_bottoni.add($button2);
    		$pannello_bottoni.add($button3);
    		$pannello_bottoni.add($button4);
    		$pannello_bottoni.add($button5);
    		$pannello_bottoni.add($button6);
    		$pannello_bottoni.add($button7);
    		$pannello_bottoni.setLayout(new FlowLayout());
    		
    		$pannello1.add($pannello_bottoni);
    		$pannello1.add($pannello2);
    		$pannello1.setLayout(new GridLayout(2,1));
    		
    		return $pannello1;
    	}
    	public static void main(String args[])
    	{
    		SwingUtilities.invokeLater(new Runnable(){public void run(){new Impiegato();}});
    	}
    	public void avvia()
    	{
    		try
    		{
    			cliente=new Socket("localhost",2222);
    			oos=new ObjectOutputStream(cliente.getOutputStream());
    			ois=new ObjectInputStream(cliente.getInputStream());
    		}
    		catch(Exception e)
    		{
    			System.err.println(e);
    		}
    		
    	}
    	public JPanel creaPannelloInserimento()
    	{
    		
    		$inserimento_id=new JTextField();
    		$inserimento_data=new JTextField();
    		$inserimento_persona=new JTextField();
    		JPanel $pannello_inserimento=new JPanel();
    		$testo1=new JLabel("Selezionare la tipologia");
    		$testo2=new JLabel("Selezionare lo stato");
    		$testo3=new JLabel("Inserisci identificativo pratica");
    		$testo4=new JLabel("Inserisci data nel formato --/--/----");
    		$testo5=new JLabel("Inserisci presona/societa coinvolta nella pratica nel formato nome cognome:");
    		$selezione_tipo=new JComboBox();
    		$selezione_stato=new JComboBox();
    		$selezione_tipo.addItem("Decreto Ingiuntivo");
    		$selezione_tipo.addItem("Iscrizione a ruolo");
    		$selezione_tipo.addItem("Notifica");
    		$selezione_stato.addItem("Inserita");
    		$selezione_stato.addItem("Archiviata");
    		$selezione_stato.addItem("Attesa di Giudizio");
    		$selezione_stato.addItem("Lavorazione");
    				
    		$pannello_inserimento.add($testo3);
    		$pannello_inserimento.add($inserimento_id);
    				
    		$pannello_inserimento.add($testo1);
    		$pannello_inserimento.add($selezione_tipo);
    				
    		$pannello_inserimento.add($testo2);
    		$pannello_inserimento.add($selezione_stato);
    				
    		$pannello_inserimento.add($testo4);
    		$pannello_inserimento.add($inserimento_data);
    		
    		$pannello_inserimento.add($testo5);
    		$pannello_inserimento.add($inserimento_persona);
    		JButton $invia_persona=new JButton("Inserisci persona");
    		$invia_persona.setActionCommand("INSERISCI_PERSONA");
    		$invia_persona.addActionListener(this);
    		$pannello_inserimento.add($invia_persona);
    		
    		JButton $invia_pratica=new JButton("Crea pratica");
    		$invia_pratica.setActionCommand("INVIA_PRATICA");
    		$invia_pratica.addActionListener(this);
    		$pannello_inserimento.add($invia_pratica);
    		
    				
    		$pannello_inserimento.setLayout(new GridLayout(8,2));
    				
    				
    		return $pannello_inserimento;
    	}
    	public JPanel creaPannelloRicerca()
    	{
    		JPanel $pannello_ricerca=new JPanel();
    		$testo6=new JLabel("Inserire id pratica da ricercare");
    		$ricerca_inserimento_id=new JTextField();
    		JButton $invia_id=new JButton("Cerca");
    		$invia_id.setActionCommand("CERCA_ID");
    		$invia_id.addActionListener(this);
    		
    		$pannello_ricerca.add($testo6);
    		$pannello_ricerca.add($ricerca_inserimento_id);
    		$pannello_ricerca.add($invia_id);
    		$pannello_ricerca.setLayout(new GridLayout(2,2));
    		
    		return $pannello_ricerca;
    	}
    	public void actionPerformed(ActionEvent e)
    	{
    		String comand=e.getActionCommand();
    		if(comand.equals("INSERISCI"))
    		{
    			
    			$pannello2.add(this.creaPannelloInserimento());
    			$button1.setEnabled(false);
    			this.setVisible(true);
    			lista_persone_coinvolte=new LinkedList<String>();
    				
    		}
    		if(comand.equals("INSERISCI_PERSONA"))
    		{
    			/*Dobbiamo andare a recuperare il nome della persona inserita nella JTextField */
    			if($inserimento_persona.getText().equals(""))
    			{
    				JOptionPane.showMessageDialog(this,"Nessuna persona inserita");
    			}
    			else
    			{
    				lista_persone_coinvolte.add($inserimento_persona.getText());
    				JOptionPane.showMessageDialog(this,"Persona Inserita");
    				$inserimento_persona.setText("");
    			}
    		}
    		if(comand.equals("INVIA_PRATICA"))
    		{
    			try
    			{
    				oos.writeObject(1);
    			}
    			catch(Exception err)
    			{
    				System.err.println(err);
    			}
    			
    		}
    		if(comand.equals("RICERCA_PRATICA_ID"))
    		{
    			$pannello2.add(this.creaPannelloRicerca());
    			$button1.setEnabled(true);
    			$button2.setEnabled(false);
    			this.setVisible(true);
    			lista_persone_coinvolte=new LinkedList<String>();
    		}
    	}
    }
    Come puoi vedere nei vari actionListener a seconda dei bottoni che vado a premere deve variare solo il pannello2 mentre il pannello1 rimane sempre lo stesso.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da identikit_man
    Come puoi vedere nei vari actionListener a seconda dei bottoni che vado a premere deve variare solo il pannello2 mentre il pannello1 rimane sempre lo stesso.
    Quello che vedo, cioè che è evidente, è che sul pannello2 fai solo degli add ... e così ovviamente non "sostituisci" un bel nulla, incrementi solo il numero di pannelli!
    Due tecniche le ho dette prima ... applica una delle due che preferisci.


    Scusa, ma il $ all'inizio delle variabili l'hai messo tu di proposito?? Noooo dai, perfavore, non farmi vedere 'ste cose a quest'ora ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ahahahaha il $ è solo una mia convenzione; utilizzata nella GUI.
    Comunque è da ieri che ci sbatto la testa ma niente non riesco ho modificato il codice nel seguente modo:
    codice:
    		if(comand.equals("INSERISCI"))
    		{
    			$pannello_principale.remove($pannello2);
    			$pannello_principale.add(this.creaPannelloInserimento());
    			$pannello_principale.validate();
    			$button1.setEnabled(false);
    			this.setVisible(true);
    			lista_persone_coinvolte=new LinkedList<String>();
    				
    		}
    		if(comand.equals("INSERISCI_PERSONA"))
    		{
    			/*Dobbiamo andare a recuperare il nome della persona inserita nella JTextField */
    			if($inserimento_persona.getText().equals(""))
    			{
    				JOptionPane.showMessageDialog(this,"Nessuna persona inserita");
    			}
    			else
    			{
    				lista_persone_coinvolte.add($inserimento_persona.getText());
    				JOptionPane.showMessageDialog(this,"Persona Inserita");
    				$inserimento_persona.setText("");
    			}
    		}
    		if(comand.equals("INVIA_PRATICA"))
    		{
    			try
    			{
    				oos.writeObject(1);
    			}
    			catch(Exception err)
    			{
    				System.err.println(err);
    			}
    			
    		}
    		if(comand.equals("RICERCA_PRATICA_ID"))
    		{
    			$pannello_principale.remove($pannello2);
    			$pannello_principale.add(this.creaPannelloRicerca());
    			$pannello_principale.validate();
    			$button1.setEnabled(true);
    			$button2.setEnabled(false);
    			this.setVisible(true);
    			lista_persone_coinvolte=new LinkedList<String>();
    		}
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.