Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 72
  1. #1

    Problema con dimensione JFrame e JTable aiuto per favore

    Salve ragazzi ho un nuovo quesito da porvi.

    Ho un JFrame che contiene una tabella e alcune label, questa tabella ogni 3 secondi in maniera automatica prende i dati da una query e aggiorna i valori al suo interno. Ora per fare questo non ci sono stati particolari problemi, la tabella viene aggiornata correttamente.

    Però il problema è dovuto dalle dimensioni del frame, in pratica quando il programma viene eseguito ha una dimensione che non riesco a modificare, e se clicco sul quadrato in altro a destra la finestra si estende correttamente, ma nel momento in cui la tabella riaggiorna i suoi dati ritorna alle dimensioni di prima.

    Spero di essere stato chiaro. Mi potete aiutare per favore???

    codice:
    public class MainClass extends Thread{
    
    	private static MainClass istanza = null;
    	Database db;
    	JFrame frame;
    	JPanel deskTabellaPartenze;
    	JPanel pane;
    	JMenuBar menuBar;
    	JLabel labelCitta;
    	Vector rows;
    	Boolean ciclo;
    	Vector Columns;
    	DefaultTableModel tabModel;
    	JTable TabellaPartenze;
    	JMenuBar jMenuBar1 = new javax.swing.JMenuBar();
        JMenu jMenu1 = new javax.swing.JMenu();
        JMenu jMenu2 = new javax.swing.JMenu();
        
    	private javax.swing.JScrollPane jScrollPane1, jScrollPane2;
    
    	public static void main(String[] args) {
    		
    	    MainClass d = new MainClass();
    	  }
    	
    	public MainClass(){
    		inizializzaDatabase();
    	        JMenu menu, submenu;
    	        JMenuItem menuItem;
    	        JRadioButtonMenuItem rbMenuItem;
    	        JCheckBoxMenuItem cbMenuItem;
            menuBar = new JMenuBar();
    	        menu = new JMenu("Impostazioni");
    	        menu.setMnemonic(KeyEvent.VK_A);
    	        menu.getAccessibleContext().setAccessibleDescription(
    	                "The only menu in this program that has menu items");
    	        menuBar.add(menu);
    	        menuItem = new JMenuItem("Inserisci nuova corsa",
    	                                 KeyEvent.VK_T);
    	        menuItem.addActionListener( new ActionListener() {
    	            public void actionPerformed( ActionEvent e ) {
    	            	ciclo = false;
    	                frame.getContentPane().remove(deskTabellaPartenze);
    	                
    	                GridBagLayoutDemo ne = new GridBagLayoutDemo();
    	                frame.remove(deskTabellaPartenze);
    	                frame.remove(pane);
    	                frame.remove(labelCitta);
    	                frame.add(ne.addComponentsToPane(frame.getContentPane()));
    	                frame.pack();
    
    	            }
    	        } );
    	        menuItem.setAccelerator(KeyStroke.getKeyStroke(
    	                KeyEvent.VK_1, ActionEvent.ALT_MASK));
    	        menuItem.getAccessibleContext().setAccessibleDescription(
    	                "This doesn't really do anything");
    	        menu.add(menuItem);
    
    	        ImageIcon icon = createImageIcon("images/middle.gif");
    	        menuItem = new JMenuItem("Both text and icon", icon);
    	        menuItem.setMnemonic(KeyEvent.VK_B);
    	        menu.add(menuItem);
    
    	        menuItem = new JMenuItem(icon);
    	        menuItem.setMnemonic(KeyEvent.VK_D);
    	        menu.add(menuItem);
    
    	        menu.addSeparator();
    	        ButtonGroup group = new ButtonGroup();
    
    	        rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
    	        rbMenuItem.setSelected(true);
    	        rbMenuItem.setMnemonic(KeyEvent.VK_R);
    	        group.add(rbMenuItem);
    	        menu.add(rbMenuItem);
    
    		frame = new JFrame("Pullman ver 1.0");
    
    		frame.setSize(900, 480);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setJMenuBar(menuBar);
    		frame.pack();
            frame.setVisible(true);
    
    	        String NumeroLocalita = db.eseguiQuery("SELECT COUNT(*) FROM archiviolocalita").toString();
    
    	        int NumeroPLocalita = Integer.parseInt(elimina_caratteri(NumeroLocalita));
    
    	              labelCitta = new JLabel();
    	              frame.getContentPane().add(BorderLayout.NORTH,labelCitta);
    	              
    	              Font myFont = new Font("Verdana", Font.PLAIN, 14);
    	              labelCitta.setFont(myFont);
    
    	                ciclo = true;
    	              for(int i =0; i<NumeroPLocalita; i++){
    	            	  if (ciclo == true){
    	            	  Object[] Localita = db.eseguiQuery("SELECT Localita FROM archiviolocalita").toArray();
    	                  String citta = Localita[i].toString();
    	                  citta = elimina_caratteri(citta);
    
    	                  labelCitta.setText(citta); 
    		              labelCitta.setPreferredSize(new Dimension (50,70));
    
    	                  
    		              
    		              String oraPartenzeDa = db.eseguiQuery("SELECT ORA_PARTENZA FROM archiviopartenzeferiali, archiviolocalita WHERE Codice_Localita = Codice and localita = '" + citta +"';").toString();
    	                  String codice1Nota = db.eseguiQuery("SELECT archivionotepartenze.abbreviazione FROM archivionotepartenze, archiviolocalita, archiviopartenzeferiali WHERE codice_localita = archiviolocalita.codice and localita = '" + citta + "' and codice_1nota = archivionotepartenze.codice;").toString();
    	                  db.eseguiAggiornamento("insert into archiviopartenzeferiali values (4,'10:10:10', 01,02,'10:50:10', '11:11:11', 02,03, '12:12:12');");
    
    
    	                  Vector v = db.eseguiQuery( "SELECT CODICE_LOCALITA, ORA_PARTENZA,ORA_ARRIVO_DA, archivionotearrivi.ABBREVIAZIONE, archivionotearrivi2.ABBREVIAZIONE FROM archiviopartenzeferiali, archiviolocalita, archivionotearrivi, archivionotearrivi2 WHERE codice_localita = archiviolocalita.codice and localita = '"+ citta+"'and  codice_1nota = archivionotearrivi.codice and codice_2nota = archivionotearrivi2.codice  ;" );
    	                  String abbreviazione1 = db.eseguiQuery( "SELECT archivionotearrivi.ABBREVIAZIONE FROM archiviopartenzeferiali, archiviolocalita, archivionotearrivi, archivionotearrivi2 WHERE codice_localita = archiviolocalita.codice and localita = '"+ citta+"'and  codice_1nota = archivionotearrivi.codice and codice_2nota = archivionotearrivi2.codice  ;" ).toString();
    	                  String abbreviazione2 = db.eseguiQuery( "SELECT archivionotearrivi2.ABBREVIAZIONE FROM archiviopartenzeferiali, archiviolocalita, archivionotearrivi, archivionotearrivi2 WHERE codice_localita = archiviolocalita.codice and localita = '"+ citta+"'and  codice_1nota = archivionotearrivi.codice and codice_2nota = archivionotearrivi2.codice  ;" ).toString();
                          abbreviazione1 = elimina_caratteri(abbreviazione1);
                          abbreviazione2 = elimina_caratteri(abbreviazione2);
    
    	                  System.out.println(abbreviazione1);
    	                  System.out.println(abbreviazione2);
    	                  Vector vettore = new Vector();
    	                   
    	                    vettore.add(new String("CODICE LOCALITA"));
    	                    vettore.add(new String("ORA PARTENZA"));
    	                    vettore.add(new String("ORA ARRIVO"));
    	                    vettore.add(new String("NOTA"));
    	                    vettore.add(new String("NOTA BIS")); 
    	                    
    	                    JTable table = new JTable(v, vettore);
    	                    System.out.println("Sono qui");
    	                    jScrollPane1 = new javax.swing.JScrollPane();
    	                    System.out.println("Sono qui");
    	                    jScrollPane1.setName("jScrollPane1");
    	                    System.out.println("Sono qui");
    	                    jScrollPane1.setViewportView(table);
    	                    System.out.println("Sono qui");
    	                    
    	                    table.getColumnModel().getColumn(0).setPreferredWidth(100);
    	                    table.getColumnModel().getColumn(1).setPreferredWidth(180);
    	                    table.getColumnModel().getColumn(2).setPreferredWidth(180);
    	                    table.getColumnModel().getColumn(3).setPreferredWidth(50);
    	                    table.getColumnModel().getColumn(4).setPreferredWidth(50);
     
    	                    deskTabellaPartenze = new JPanel(new BorderLayout());
    	                    deskTabellaPartenze.setLayout(new GridBagLayout());
    	                    GridBagConstraints z = new GridBagConstraints();
    	                    z.fill = GridBagConstraints.HORIZONTAL;
    	                    frame.add(deskTabellaPartenze, BorderLayout.CENTER);
    	                    
    	                    z.ipady=82;
    	                	z.fill = GridBagConstraints.HORIZONTAL;
    	                	z.gridx = 0;
    	                	z.gridy = 0;
    	                    deskTabellaPartenze.add(jScrollPane1, z);
    
    	                    frame.pack();
    	                    int num = table.getRowCount();
    	                    for(int b = 0; b<num; b++){
    	                    	System.out.println("Sono entrato"+b);	
    	                        
    	                    }
    	  	                String descrizioneAbbr1 = db.eseguiQuery("SELECT Nota FROM Archivionotearrivi where abbreviazione= '"+abbreviazione1+"';").toString();
    	                    descrizioneAbbr1 = elimina_caratteri(descrizioneAbbr1);
    	                    String descrizioneAbbr2 = db.eseguiQuery("SELECT Nota FROM Archivionotearrivi where abbreviazione= '"+abbreviazione2+"';").toString();
    	  	                descrizioneAbbr2 = elimina_caratteri(descrizioneAbbr2);
    	                    pane = new JPanel();
    	  	                
    	  	                frame.getContentPane().add(BorderLayout.SOUTH,pane);
    		                pane.setLayout(new GridBagLayout());
    		                GridBagConstraints c = new GridBagConstraints();
    		                c.fill = GridBagConstraints.HORIZONTAL;
    		                JLabel labelNote = new JLabel(abbreviazione1);
    		                c.weightx = 0.5;
    		                
    		                c.fill = GridBagConstraints.HORIZONTAL;
    		            	c.gridx = 0;
    		            	c.gridy = 0;
    		            	pane.add(labelNote, c);
    		            	
    		            	JLabel labelNote2 = new JLabel(abbreviazione2);
    		            	c.fill = GridBagConstraints.HORIZONTAL;
    		            	c.ipady = 20;
    		            	c.weightx = 0.0;
    		            	c.gridwidth = 3;
    		            	c.gridx = 0;
    		            	c.gridy = 1;
    		            	pane.add(labelNote2, c);
    		            	
    		            	JLabel labelDescrizione1 = new JLabel(descrizioneAbbr1);
    		            	c.fill = GridBagConstraints.HORIZONTAL;
    		            	c.ipady = 20;
    		            	c.weightx = 0.0;
    		            	c.gridwidth = 3;
    		            	c.gridx = 1;
    		            	c.gridy = 0;
    		            	pane.add(labelDescrizione1, c);
    		            	
    		            	JLabel labelDescrizione2 = new JLabel(descrizioneAbbr2);
    		            	c.fill = GridBagConstraints.HORIZONTAL;
    		            	c.ipady = 20;      //make this component tall
    		            	c.weightx = 0.0;
    		            	c.gridwidth = 3;
    		            	c.gridx = 1;
    		            	c.gridy = 1;
    		            	pane.add(labelDescrizione2, c);
    
    	  	                labelNote.setPreferredSize(new Dimension (50,70));
    	                    labelNote2.setText(abbreviazione1);*/
    	                    
    	                    frame.pack();            
    	                  try {
    						MainClass.sleep(3000);
    						pane.removeAll();
    						frame.remove(deskTabellaPartenze);
    					 }//fine try 
    	                 catch (InterruptedException e) {
    						e.printStackTrace();
    					 }
    	    
    	              }
    	              }  
    	              System.out.println("Sono uscito dal ciclo");
    	}
    
    	 private ImageIcon createImageIcon(String string) {
    
    		return null;
    	}
    
    	public void addRow() 
              {
              Vector r=new Vector();
              r=createBlankElement();
              rows.addElement(r);
              TabellaPartenze.addNotify();
    
              }
    	 public Vector createBlankElement() 
         {
         Vector t = new Vector();
         t.addElement((String) " ");
         t.addElement((String) " ");
         t.addElement((String) " ");
         t.addElement((String) " ");
         
         return t;
         }
    
    	public void addColumns(String[] colName)//Table Columns
        {
           for(int i=0;i<colName.length;i++)
              Columns.addElement((String) colName[i]);
        }
    
    	private String elimina_caratteri(String numeroPartenzeFeriali) {
    	   numeroPartenzeFeriali = numeroPartenzeFeriali.replace("]", ""); 
    	   numeroPartenzeFeriali = numeroPartenzeFeriali.replace("[", "");
    		return numeroPartenzeFeriali;
    	}
    
    	private void inizializzaDatabase() {
    		db = new Database("partenzearrivi");
    	    if ( !db.connetti() ) {
    	       System.out.println("Errore durante la connessione al database :(");
    	       System.out.println( db.getErrore() );
    	       System.exit(0);
    	    }
    	    else{
    	    	System.out.println("Mi sono connesso");
    	    }
    	}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    24
    Ma tu vuoi che il frame resti con una dimensione costante?
    Se è così dopo avere impostato la dimensione con setSize() puoi provare setResizable(false); chiamandolo sull'oggetto JFrame

  3. #3
    allora se io metto frame.setSize(1000, 1000); o setSiza(10,10); la dimensione del frame è sempre la stessa.

    poi a me interessa che quando faccio click sul quadrato per impostare il frame a tutto schermo, tutti gli elementi vengano ingranditi insomma come succede nelle normali applicazioni

  4. #4
    Ho provato come mi hai suggerito ma nulla non funziona. Non capisco come mai la funzione setSize non funziona.

    qualcuno sa dare qualche suggerimento?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    24
    Originariamente inviato da cuccagna
    Ma tu vuoi che il frame resti con una dimensione costante?
    Se è così dopo avere impostato la dimensione con setSize() puoi provare setResizable(false); chiamandolo sull'oggetto JFrame
    Io conosco un modo manuale e pal.loso per fare quello che vuoi tu.
    Però è molto lungo ma dovrebbe funzionare. Forse esiste un altro modo ad esempio da netbeans o eclipse che offrono funzionalità drag and drop.

    Cmq ti espongo come potresti fare:

    Dichiari una classe che estende JFrame. In questa classe puoi gestire le applicazioni grafiche.
    Sovrascrivi il metodo paintComponent così:
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    .
    .
    .
    }

    Nei puntini chiami il metodo getSize() di JFrame che ritorna un oggetto della classe Dimension
    Tramite i campi width e height di Dimension puoi quindi vedere la larghezza della finestra e la lunghezza della stessa.
    Nota che il metodo paintComponent() può essere richiamato dal programmatore tramite il metodo repaint() ma in questo caso a noi non interessa perchè è verrà chiamato automaticamente ad ogni resize() della finestra.
    A questo punto puoi impostare ogni componente del tuo frame in funzione di width e height.

    Oppure se hai un gestore di layout( non ho letto il tuo codice ) automatico tipo FlowLayout o altri puoi fare questo:
    All'inizio:
    Container container = getContentPane(); //getContentPane() lo devi chiamare sull'oggetto JFrame.
    tu avrai
    layout = new FlowLayout(); ad esempio o BorderLayout ecc.


    Poi implementi il metodo paintComponent() come ti ho detto sopra.
    Dopo super.paintComponent(g);
    scrivi
    layout.layoutContainer(container) // così dovresti riallineare i componenti collegati


    In bocca al lupo

  6. #6
    allora sono riuscito a risolvere il problema della risoluzione dello schermo. Adesso ho impostato la dimensione del JFrame a 1000 x 600 e si vede tutto più grande come volevo io.

    Per nel momento in cui ingrandisco il frame va a tutto schermo correttamente, ma quando la tabella viene aggiornata tutto ritorna alla dimensione 1000 x 600.

  7. #7
    Non so che modifiche hai apportato, ma dal codice iniziale che hai postato per risolvere il tuo problema dovrebbe bastare rimuovere la riga:

    codice:
    frame.pack();
    che si trova all'interno del ciclo for.

    Comunque credo tu stia facendo una gran confusione con i thread ed i componenti swing. Ad ogni ciclo metti e rimuovi una marea di cose rallentando ed appesantendo notevolmente l'applicativo.
    Prova a ragionare a oggetti o componenti. Se io ho bisognop di una tabella che si refresha ogni tot tempo non gestirei la cosa dall'esterno, ma creerei appunto un componente con tale funzionalità insita nel suo comportamento.

    Prova a dare un'occhiata al codice seguente. Ho creato una finestra principale con all'interno una label che cambia valore ogni tot secondi. Ma è la label stessa ad essere un thread, la finestra principale non fa altro che aggiungere la label senza dover gestire il suo funzionamento. Ovviamente è solo un esempio dal quale poter prendere spunto per riorganizzare meglio il tuo applicativo.

    codice:
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class MainFrame extends JFrame {
    	
    	public MainFrame() {
    		AutoRefreshLabel arLabel = new AutoRefreshLabel();
    		JPanel panel = new JPanel();
    		panel.add(arLabel);
    		this.setSize(640, 480);
    		this.getContentPane().add(panel);
    		this.setVisible(true);
    		arLabel.start();
    	}
    	
    	public static void main(String[] args) {
    		javax.swing.SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				new MainFrame();
    			}
    		});
    	}
    
    	class AutoRefreshLabel extends JLabel implements Runnable {
    		
    		private boolean isAlive = false;
    
    		public void start() {
    			Thread t = new Thread(this);
    			isAlive = true;
    			t.start();
    		}
    
    		public void run() {
    			int x = 0;
    			while (isAlive) {
    				try {
    					this.setText(x++ + "");
    					Thread.sleep(2000);
    					if (x == 10) {
    						isAlive = false;
    					}
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    
    	}
    
    }
    E poi comincia a spacchettare un po' il codice suddividendolo in classi e package, altrimenti viene fuori un monoblocco incomprensibile ed ingestibile.

    P.S.
    Prima di iniziare a scivere codice ti consiglio di utilizzare le buone vecchie carta e penna per progettare il tutto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Grazie mille per il tuo prezioso consiglio.

    Ho sostituito frame.pack() con frame.validate();

    nel frattempo voglio però capire ciò che mi hai detto prima. Proverò a fare delle modifiche al codice rendendolo anche più leggibile. Appena mi sarà possibile ti mostrerò il nuovo codice.

    sempre grazie per i vostri preziosi consigli

  9. #9
    Allora ho seguito il tuo consiglio e sto provando a modificare il codice creando le varie classi e inserendole nel form ma ho subito un problema, ho modificato la classe che mi avevi gentilmente fornito ma nel form non appare nulla.

    codice:
    import java.util.Vector;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    
    public class MainFrame extends JFrame {
    	Database db;
    	public MainFrame() {
    		inizializzaDatabase();
    		
    		
    		AutoRefreshTable arLabel = new AutoRefreshTable();
    		JPanel panel = new JPanel();
    		panel.add(arLabel);
    		this.setSize(640, 480);
    		this.getContentPane().add(panel);
    		this.setVisible(true);
    		arLabel.start();
    	}
    	
    	private void inizializzaDatabase() {
    			// TODO Auto-generated method stub
    			db = new Database("partenzearrivi");
    		    if ( !db.connetti() ) {
    		       System.out.println("Errore durante la connessione al database :(");
    		       System.out.println( db.getErrore() );
    		       System.exit(0);
    		    }
    		    else{
    		    	System.out.println("Mi sono connesso");
    		    }
    		}//fine inizializzaDatabase
    
    	public static void main(String[] args) {
    		javax.swing.SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				new MainFrame();
    			}
    		});
    	}
    
    	class AutoRefreshTable extends JScrollPane implements Runnable {
    		
    		private boolean isAlive = false;
    
    		public void start() {
    			Thread t = new Thread(this);
    			isAlive = true;
    			t.start();
    		}
    
    		public void run() {
    			int x = 0;
    			while (isAlive) {
    				try {
    					System.out.println("sto qua");
    					  Object[] Localita = db.eseguiQuery("SELECT Localita FROM archiviolocalita").toArray();
    	                  String citta = Localita[x].toString();
    	                  citta = elimina_caratteri(citta); 
    					
    	                  System.out.println("sto qua2");
    					Vector v = db.eseguiQuery( "SELECT CODICE_LOCALITA, ORA_PARTENZA,ORA_ARRIVO_DA, archivionotearrivi.ABBREVIAZIONE, archivionotearrivi2.ABBREVIAZIONE FROM archiviopartenzeferiali, archiviolocalita, archivionotearrivi, archivionotearrivi2 WHERE codice_localita = archiviolocalita.codice and localita = '"+ citta+"'and  codice_1nota = archivionotearrivi.codice and codice_2nota = archivionotearrivi2.codice  ;" );
    		              
    	                  Vector vettore = new Vector();
    	                  System.out.println("sto qua3"); 
    	                    vettore.add(new String("CODICE LOCALITA"));
    	                    vettore.add(new String("ORA PARTENZA"));
    	                    vettore.add(new String("ORA ARRIVO"));
    	                    vettore.add(new String("NOTA"));
    	                    vettore.add(new String("NOTA BIS"));
    	                 
    	                    
    	                    JTable table = new JTable(v, vettore);
    	                    JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
    	                    jScrollPane1.setName("jScrollPane1");
    	                    jScrollPane1.setViewportView(table);
    	                    table.getColumnModel().getColumn(0).setPreferredWidth(100);
    	                    table.getColumnModel().getColumn(1).setPreferredWidth(180);
    	                    table.getColumnModel().getColumn(2).setPreferredWidth(180);
    	                    table.getColumnModel().getColumn(3).setPreferredWidth(50);
    	                    table.getColumnModel().getColumn(4).setPreferredWidth(50);
    	                    
    	                    table.setRowHeight(30);
    	                    table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
    					Thread.sleep(2000);
    					if (x == 10) {
    						isAlive = false;
    					}//fine if
    				}//fin try
    				catch (InterruptedException e) {
    					e.printStackTrace();
    				}//fine cath
    			}//fine ciclo while
    		}//fin void run
    
    	}//fine autorefreshtable
    
    	private String elimina_caratteri(String numeroPartenzeFeriali) {
    		// TODO Auto-generated method stub
    	   numeroPartenzeFeriali = numeroPartenzeFeriali.replace("]", ""); 
    	   numeroPartenzeFeriali = numeroPartenzeFeriali.replace("[", "");
    		return numeroPartenzeFeriali;
    	}
    
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    a parte il fatto che l'approccio di satifal è migliore (componente che da sè fa autorefresh ogni tot) è davvero necessario fare tutti questi update (ogni 3 sec oltretutto)? Puoi creare un meccanismo di update (sempre autogestito) in seguito ad eventi
    cmq ti consiglio, oltre all'autoupdate, di impostare anche regole di layout, utili quando non hai idea del tipo di schermo usato per eseguire il programma

    poi guarda alle API di JFrame e hai

    pack

    public void pack()
    Causes this Window to be sized to fit the preferred size and layouts of its subcomponents. If the window and/or its owner are not yet displayable, both are made displayable before calculating the preferred size. The Window will be validated after the preferredSize is calculated.

    e validate
    public void validate()
    Validates this container and all of its subcomponents.
    The validate method is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layout-related information changed) after the container has been displayed.

    questo significa che un pack è necessario la prima volta che costruisci il frame, il validate lo chiami dall'update method

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.