2011-10-02 9 views
13

Sto facendo un progetto utilizzando Java e in quanto ho bisogno di ricaricare intero JFrame dopo aver fatto clic sul pulsante particolare su quello JFrame. Come fare questo?Come posso aggiornare o ricaricare JFrame?

+3

cosa intendi con 'refresh'? E '' restituire tutti i componenti allo stato in cui erano quando sono stati inseriti per la prima volta ',' cambiare i componenti ', qualcos'altro? –

+0

aggiungi/rimuovi JComponent in runtime o modifica la dimensione, necessaria per riformattare ..., – mKorbel

+0

cosa stai facendo esattamente con JFrame. Gentilmente elobratelo. ? –

risposta

23

Prova

SwingUtilities.updateComponentTreeUI(frame); 

Se ancora non funziona, allora dopo aver completato il passo precedente provare

frame.invalidate(); 
frame.validate(); 
frame.repaint(); 
+4

-1 per updateComponentTreeUI: è quasi ** sempre ** la cosa sbagliata da fare (sta reimpostando gli ui-delegati) quando l'obiettivo più probabile è semplicemente il ricaricamento dei dati. – kleopatra

+1

_reload frame_ non è un termine tecnico e qualunque cosa si supponga significhi, updateComponentTree è ** NON ** la risposta. In realtà, la domanda così com'è è troppo aspecifica per essere comprensibile, quindi votato per chiudere la domanda errata – kleopatra

0

Si dovrebbe utilizzare questo codice

this.setVisible(false); //this will close frame i.e. NewJFrame 

new NewJFrame().setVisible(true); // Now this will open NewJFrame for you again and will also get refreshed 
+6

cattiva risposta (è per questo che suggerisce di chiudere la domanda - senza successo ;-) * NO * - qualunque sia il vero problema nella domanda, la creazione di un nuovo frame è * NON * la soluzione. Non distruggeresti la tua casa solo perché ha bisogno di un po 'di vernice nuova, vero? – kleopatra

+0

@kleopatra No, non lo farà. – Ibrahim

0

Prova questo codice. Ho anche affrontato lo stesso problema, ma alcuni come ho risolto.

public class KitchenUserInterface { 

    private JFrame frame; 
    private JPanel main_panel, northpanel , southpanel; 
    private JLabel label; 
    private JButton nextOrder; 
    private JList list; 

    private static KitchenUserInterface kitchenRunner ; 

    public void setList(String[] order){ 
     kitchenRunner.frame.dispose(); 
     kitchenRunner.frame.setVisible(false); 
     kitchenRunner= new KitchenUserInterface(order); 

    } 

    public KitchenUserInterface getInstance() { 
     if(kitchenRunner == null) { 
      synchronized(KitchenUserInterface.class) { 
       if(kitchenRunner == null) { 
        kitchenRunner = new KitchenUserInterface(); 
       } 
      } 
     } 


     return this.kitchenRunner; 
    } 

    private KitchenUserInterface() { 


     frame = new JFrame("Lullaby's Kitchen"); 
     main_panel = new JPanel(); 
     main_panel.setLayout(new BorderLayout()); 
     frame.setContentPane(main_panel); 



     northpanel = new JPanel(); 
     northpanel.setLayout(new FlowLayout()); 


     label = new JLabel("Kitchen"); 

     northpanel.add(label); 


     main_panel.add(northpanel , BorderLayout.NORTH); 


     frame.setSize(500 , 500); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private KitchenUserInterface (String[] order){ 
     this(); 
     list = new JList<String>(order); 
     main_panel.add(list , BorderLayout.CENTER); 

     southpanel = new JPanel(); 
     southpanel.setLayout(new FlowLayout()); 

     nextOrder = new JButton("Next Order Set"); 
     nextOrder.addActionListener(new OrderUpListener(list)); 
     southpanel.add(nextOrder); 
     main_panel.add(southpanel, BorderLayout.SOUTH); 



    } 

    public static void main(String[] args) { 
     KitchenUserInterface dat = kitchenRunner.getInstance(); 
     try{ 

     Thread.sleep(1500); 
     System.out.println("Ready"); 
     dat.setList(OrderArray.getInstance().getOrders()); 
     } 
     catch(Exception event) { 
      System.out.println("Error sleep"); 
      System.out.println(event); 
     } 


     } 

} 
3

basta usare frame.setVisible (false); frame.setVisible (true); Ho avuto questo problema con JLabels con le immagini, e questo lo ha risolto

Problemi correlati