Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12
  1. #11
    Grazie siete stati chiarissimi.
    Vedevo la finestra priva di dimensioni perchè mettevo pack() prima di aggiungere i componenti :P
    In sostanza con super richiamo il costruttore di JFrame (questo solo perchè l'ho esteso alla classe finestra, altrimenti dovevo creare l'oggetto window) e posso applicare i vari metodi, poi ciò che riguarda la finestra lo scrivo all'inizio ad eccezione di pack() che gli da la dimensione a seconda di cosa c'è dentro e setLocationRelativeTo(null) che la centra dopo aver conosciuto le dimensioni del frame. Giusto?

    Che avresti usato al posto del gridlayout? E perchè troppi pannelli? Per tenere tutto centrato su 2 colonne ho pensato che un gridlayout con all'interno un flowlayout per centrare i componenti fosse la soluzione migliore. Forse era meglio il borderlayout?

    2 cose non mi sono troppo chiare:
    Direi che ti conviene fare un mainPanel che ti contenga tutti i tuoi panelli e poi aggiungerne solo uno al JFrame, è una gestione più lineare.
    e
    se guardi l'esempio che ho fatto io l'invocazione del frame viene fatta da SwingUtilities.invokeLater(), il perché lo puoi trovare facilmente online, riguarda quello che accennavo prima sull'EDT


    Per la seconda cosa ho trovato qualcosa online dopo darò una lettura, ma per la prima credevo di averlo già fatto con il mainContainer

  2. #12
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da ixol Visualizza il messaggio
    Grazie siete stati chiarissimi.
    Vedevo la finestra priva di dimensioni perchè mettevo pack() prima di aggiungere i componenti :P
    In sostanza con super richiamo il costruttore di JFrame (questo solo perchè l'ho esteso alla classe finestra, altrimenti dovevo creare l'oggetto window) e posso applicare i vari metodi, poi ciò che riguarda la finestra lo scrivo all'inizio ad eccezione di pack() che gli da la dimensione a seconda di cosa c'è dentro e setLocationRelativeTo(null) che la centra dopo aver conosciuto le dimensioni del frame. Giusto?
    Sì esatto, per quanto riguarda l'oggetto window sarebbe bene non avere mai bisogno di definire una variabile di tipo JFrame,JDialog o un'altra finestra, sempre meglio estendere la classe e istanziare un oggetto di una sottoclasse.
    Questo si può facilmente applicare ai sotto-componenti come i pannelli, le label, i bottoni etc. quando avrai bisogno di costruirne di molti con le stesse caratteristiche o con logica comune: invece di creare metodi nella classe del frame che restituiscano uno di questi componenti crei la tua classe che estende il componente desiderato e "nascondi" la costruzione dell'oggetto al frame, che lo riceve solamente (è più ordinato così il tutto).

    Quote Originariamente inviata da ixol Visualizza il messaggio
    Che avresti usato al posto del gridlayout? E perchè troppi pannelli? Per tenere tutto centrato su 2 colonne ho pensato che un gridlayout con all'interno un flowlayout per centrare i componenti fosse la soluzione migliore. Forse era meglio il borderlayout?
    Ho riguardato meglio il codice, in realtà non vedo grandi problemi nell'utilizzo del GridLayout, a me personalmente non piace perché ho avuto spesso problemi con i posizionamenti e nel settare i bordi e le dimensioni, visto che nel GridLayout ogni componente di default dovrebbe occupare la stessa area.
    Questo in molti casi può essere davvero seccante, quindi io mi sono abituato a combinare il FlowLayout con il BoxLayout e il BorderLayout e non ho mai avuto grandi problemi (ci sono anche layout più complessi ovviamente)


    Per quanto riguarda l' invokeLater è meglio se ti leggi tu quello che trovi online, non riuscirei a spiegarlo senza riguardarmelo tutto anch'io quindi a questo punto fai tu .

    Quote Originariamente inviata da ixol Visualizza il messaggio
    per la prima credevo di averlo già fatto con il mainContainer
    Penso che il suggerimento si riferisse al fatto di lasciare come layout del contentPane il BorderLayout che ha impostato di suo di default, e aggiungere al content pane un pannello principale con settato il GridLayout che contenga tutti i sotto pannelli.
    Questo può esserti molto utile anche nella fase di scrittura e modifica dell'interfaccia, supponi per esempio di volere aggiungere nella parte destra del tuo frame un'immagine del gioco o altri componenti.
    Se è il contentPane ad avere settato il GridLayout per ogni piccola modifica devi ripensare tutto il design del frame, se invece racchiudi tutto dentro un altro pannello poi ti basta fare qualcosa del tipo:

    codice:
    Container contentPane=getContentPane();
    // ... costruisci il mainPanel a cui aggiungi tutti i sotto pannelli ...
    contentPane.add(mainPanel,BorderLayout.CENTER); // aggiungi il mainPanel al centro del content pane
    // ... costruisci qualsiasi altro componente che potresti volere aggiungere, ad esempio un pannello con un'immagine
    contentPane.add(imagePanel,BorderLayout.EAST);
    Ovviamente è solo un esempio ma potresti trovarti spesso in situazioni del genere

    [PS:] E' convenzione in java usare l'iniziale maiscola per ogni classe, fallo anche per le classi che estendono gli ActionListener
    Ultima modifica di Ansharja; 22-04-2016 a 00:59

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 © 2026 vBulletin Solutions, Inc. All rights reserved.