Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di ZannaZ
    Registrato dal
    May 2006
    Messaggi
    82

    [SWING] Problema di visualizzazione nel ricaricare i componenti

    Premettendo che questo è il mio primo approccio a Swing e alle interfacce grafiche in generale, e che quindi per fare quello che sto facendo ci saranno altri 10 modi più precisi ed eleganti, il mio problema è questo:
    ho una serie di JButton che visualizzano lo stato di alcuni oggetti; in seguito a degli input da parte dell'utente questi oggetti possono modificare le loro caratteristiche e anche venire del tutto eliminati.
    Così, mantenendo il codice che avevo precedentemente scritto, ho pensato che il modo più semplice per fare ciò fosse dopo ogni input dell'utente ricaricare tutti gli oggetti (che sono contenuti in una lista, quindi se uno di essi è stato eliminato non verrà semplicemente più ridisegnato), ovvero eliminarli e ridisegnarli.
    Per eliminarli utilizzo il metodo remove(), per ridisegnarli invoco i metodi repaint() e doLayout() sul frame; la prima volta tutto fila liscio, invece dalla seconda in poi i vecchi JButton, che dovrebbero essere spariti, si sovrappongono ai JButton appena creati; se massimizzo e ripristino la finestra, tutto ritorna ok: i vecchi JButton spariscono e rimangono solo i nuovi così come dovrebbe essere.
    Da cosa dipende? Esiste un metodo migliore per ricaricare tutti i componenti?

    Grazie in anticipo delle vostre risposte.

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    posta un po' di codice e vediamo dove è l'errore
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it L'avatar di ZannaZ
    Registrato dal
    May 2006
    Messaggi
    82
    Ho risolto impostando una dimensione predefinita al frame (setSize); in questo modo tutto fila liscio.
    Probabilmente era il metodo pack che mi dava problemi.

    Comunque questo è il mio metodo che ridisegna l'interfaccia grafica:
    codice:
    //Ricarica l'interfaccia grafica
    public void setup(){
    	centralPanel.removeAll();
    	frame.remove(playerPanel);
    	frame.remove(computerPanel);
    	primaCartaSelezionata=-1; 
    	secondaCartaSelezionata=-1;
    	suAltroMazzo = false;
    	MossaButton mossaButton = new MossaButton();
    	JButton cancelButton = new JButton("Annulla");
    	cancelButton.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			gui.setup();
    		}
    	});
    	centralPanel.add(mossaButton);
    	centralPanel.add(cancelButton);
    	playerPanel = creaPannelloCarte(mazzoPlayer,new SelezioneCartaPlayerListener());
    	computerPanel = creaPannelloCarte(mazzoComputer, new SelezioneCartaPCListener());
    	playerPanel.repaint();
    	playerPanel.doLayout();
    	computerPanel.repaint();
    	computerPanel.doLayout();
    	frame.add(playerPanel,BorderLayout.SOUTH);
    	frame.add(computerPanel,BorderLayout.NORTH);
    	//frame.pack();
    	frame.repaint();
    	frame.validate();
    	//frame.doLayout();
    	frame.setSize(1000,400);
    	frame.setVisible(true);
    }

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.