Visualizzazione dei risultati da 1 a 10 su 12

Visualizzazione discussione

  1. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da ixol Visualizza il messaggio
    Le uniche differenze dal tuo codice sono che ho creato una nuova classe per il main (ho letto in giro su internet che conviene farlo) e che non uso il metodo pack() perchè ho un gridlayout e avrei una finestra priva di dimensioni.
    La classe per il Main va benino, 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 (in realtà in questa parte sono anch'io abbastanza alle prime armi).

    Invece il metodo pack() devi usarlo, altrimenti è chiaro che il tuo frame non avrà dimensioni.Puoi anche specificarle tu manualmente, richiamando sul JFrame il metodo setSize(int w,int h), ma è molto meglio lasciare che il sia il frame stesso a calcolare le proprie dimensioni.

    Il motivo per cui tu non vedi nulla è un errore abbastanza semplice: hai esteso correttamente JFrame nella classe Finestra, quindi l'oggetto costruito dal costruttore è effettivamente un JFrame, che poi rendi visibile dalla classe principale.

    Ma all'interno del costruttore invece che aggiungere tutti i pannelli e settare le proprietà direttamente sull'oggetto che stai istanziando, aggiungi tutto a una variabile window, che poi non rendi mai visibile !

    Come dicevo non ha alcun senso mantenere una variabile di tipo JFrame all'interno della tua classe, è proprio l'oggetto Finestra il tuo frame! Quindi ad esempio le righe:

    codice:
    JFrame window = new JFrame("Calcolo Probabilità Yugioh");
    window.setSize(347, 228);
    window.setResizable(false);
    window.setLocationRelativeTo(null);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    vanno modificate in :

    codice:
    super("Calcolo Probabilità Yugioh"); // stai richiamando il costruttore della superclasse JFrame direttamente sul tuo oggetto !!
    setSize(347, 228);
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Questa parte è cruciale e senza comprendere questo non vai molto avanti.Nella prima riga, come scritto nel commento, richiami il costruttore di JFrame, e da quel momento tutte le caratteristiche vengono applicate direttamente alla tua Finestra (con i metodi setSize(),setResizable() ecc.).

    Quindi la tua variabile window non serve assolutamente a niente, va tutto applicato all'oggetto che stai costruendo.

    Vedrai che se modifichi questo aspetto e inserisci come ultima riga nel costruttore il metodo pack(), tutto quello che hai creato e aggiunto all'oggetto viene correttamente visualizzato.

    Altri consigli: i metodi pack() e setLocationRelativeTo(null) vanno richiamati dopo aver costruito tutto il frame.
    Il motivo è semplice: pack() richiude il contenitore con tutto quello che è inserito, mentre setLocationRelativeTo(null) è un modo per centrare il frame nello schermo, e sarebbe meglio farlo quando esso è già correttamente dimensionato.

    Per il resto vedo che usi molti (troppi a mio parere) pannelli per un'interfaccia abbastanza semplice, ma qui si tratta di usare bene i layout e il design non è un aspetto così immediato e facile da padroneggiare.
    Per ora modifica quelle cose, al massimo poi si riparlerà dello "stile di scrittura", tieni comunque conto che ognuno ha il proprio stile e io non sono certo un professionista, tanto per dirne una comunque io odio a morte il GridLayout e non lo utilizzo mai

    [EDIT]: accidenti battuto dal veloce schumy di poco , comunque non abbiamo scritto cose così diverse
    Ultima modifica di Ansharja; 21-04-2016 a 17:49

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.