Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    Problema con il GridLayout

    Salve,

    sto implementando un menu di registrazione, gli oggetti sono disposti in questo modo:

    (JLabel) nome - JTextField
    cognome - JTextField
    data di Nascita - JTextField
    .......

    Se utilizzo il GridLayout succede il JTextField occupa tutto lo spazio disponibile, cioè tutto il pannello, mentre io lo vorrei di dimensioni normali (come in FlowLayout).
    Qualcuno sa come posso rimediare ?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Se utilizzo il GridLayout succede il JTextField occupa tutto lo spazio disponibile, cioè tutto il pannello, mentre io lo vorrei di dimensioni normali (come in FlowLayout).
    Bisognerebbe vedere il codice che hai scritto ... forse hai sbagliato qualcosa. In generale: in un componente X che ha un GridLayout il "preferred size" di X è quella dimensione per cui tutte le celle hanno la dimensione uguale al preferred size del componente più grande.
    Ma se imponi tu una dimensione (direttamente o indirettamente) al componente X, non contano più le dimensioni dei singoli componenti contenuti. Il componente X suddivide brutalmente la sua dimensione in N celle uguali e basta.


    Comunque per un visualizzazione in stile "form" (label a sinistra e campi a destra) generalmente è molto più utile il GridBagLayout.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Bisognerebbe vedere il codice che hai scritto ... forse hai sbagliato qualcosa. In generale: in un componente X che ha un GridLayout il "preferred size" di X è quella dimensione per cui tutte le celle hanno la dimensione uguale al preferred size del componente più grande.
    Ma se imponi tu una dimensione (direttamente o indirettamente) al componente X, non contano più le dimensioni dei singoli componenti contenuti. Il componente X suddivide brutalmente la sua dimensione in N celle uguali e basta.


    Comunque per un visualizzazione in stile "form" (label a sinistra e campi a destra) generalmente è molto più utile il GridBagLayout.
    Oh...cavolo..non sapevo dell'esistenza del GridBagLayout XD . Vado a vedere come si "utilizza". Ciao e grazie :-).

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    GridBagLayout è più complesso da usare del GridLayout. Ma se ne comprendi bene i concetti e l'uso, ti può essere utilissimo, in questo caso e in molti altri.

    Se devi fare un solo form nella tua applicazione, non ci sono grossi problemi, cioè lo fai creando il layout esattamente come faresti con qualunque altro layout. Se però nella tua applicazione hai molti form da fare, ti conviene prima fare un piccolo lavoro di "design" a livello object-oriented. Cioè incapsulare il concetto di layout del form in una classe specifica che poi puoi (ri)usare e/o estendere (a seconda del design che scegli).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Infatti è più complesso, ho trovato una guida su internet 70 pagine!!. In verità sto utilizzando il GridBagLayout ma con windowBuilder perché scrivere tutto il codice è un po da masochista.

    Ho creato una finestra in cui l'utente può registrarsi se è un nuovo utente oppure entrare direttamente se è già registrato. Mi servirebbe un separatore che divide in due la finestra. Su internet ho trovato il JSeparator, ma è la scelta giusta ?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Infatti è più complesso, ho trovato una guida su internet 70 pagine!!. In verità sto utilizzando il GridBagLayout ma con windowBuilder perché scrivere tutto il codice è un po da masochista.
    Sì, è più complesso. Ma ricorda cosa dicevo prima: se devi gestire svariati "campi" del form e soprattutto se hai più form nella tua applicazione, allora devi fare prima un piccolo lavoro a livello di design object-oriented, per incapsulare la logica di creazione del form.

    Quello a cui si potrebbe pensare di arrivare è una classe es. FormPanel (chiaramente tutta da pensare e sviluppare) da utilizzare così (codice scritto al volo e solo come esempio):

    codice:
    public class MyFrame extends JFrame {
        private JLabel labelNome;
        private JTextField fieldNome;
        private JLabel labelCognome;
        private JTextField fieldCognome;
        private FormPanel formPanel;
    
        public MyFrame() {
            // .....
            labelNome = new JLabel("Nome");
            fieldNome = // ......
            // .....
    
            formPanel = new FormPanel();
            formPanel.addFormRow(labelNome, fieldNome);
            formPanel.addFormRow(labelCognome, fieldCognome);
    
            //... aggiungere formPanel da qualche parte nel layout del frame
            //... altro
        }
    }

    Tu dirai: e GridBagLayout dove sta? Semplicemente sta tutto incapsulato dentro FormPanel. Così lo fai una volta sola, riutilizzabile, e devi gestire i constraint solo una volta per label e "campo" (qualunque cosa sia il campo .. JTextField, JComboBox ecc..).

    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Ho creato una finestra in cui l'utente può registrarsi se è un nuovo utente oppure entrare direttamente se è già registrato. Mi servirebbe un separatore che divide in due la finestra. Su internet ho trovato il JSeparator, ma è la scelta giusta ?
    JSeparator è solo la linea divisore (orizzontale o verticale) e basta. Dipende dove la si usa, tipicamente si utilizza per separare gruppi di voci nei menù ma lo puoi utilizzare ovunque come qualunque componente.
    Quindi se ti interessa solo la linea grafica, sì è questo che ti serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Ciao andBin,

    ho creato una classe utente contenente i metodi pubblici: setNome/getNome, setCognome/getCognome, setNumeroDiCredito...ecc
    Quando l'utente preme il pulsante "registrati" deve essere creato un esemplare di Utente. Come si possono gestire più utenti registrati ? La variabile utente di tipo Utente ha sempre lo stesso nome di variabile. Come si deve procedere in questi casi?. Bisogna memorizzare i dati in un file ?

    codice:
    public class MyActionListenerButton1 implements ActionListener
    	{
    
    
    		public void actionPerformed(ActionEvent e) 
    		{
    			
    			Utente utente = new Utente();
    			String nome = lblNewLabel.getText();
    			utente.setNome(nome);
    			
    			String cognome = lblNewLabel_1.getText();
    			utente.setCognome(cognome);
    			
    			String data = lblNewLabel_2.getText();
    			int numero = Integer.parseInt(data);
    			utente.setDataDiNascita(numero);
    			
    			
    			System.out.println("OK");
    		
    	}

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Come si possono gestire più utenti registrati ? La variabile utente di tipo Utente ha sempre lo stesso nome di variabile.
    La questione è posta male ... non conta la variabile (né il suo nome). Hai istanziato un oggetto Utente, hai settato alcune sue proprietà ma .. non vedo altro uso. Cosa vuoi farne?
    Se vuoi gestire più utenti devi avere una "base dati" degli utenti. Una collezione in memoria (poco sensato nella realtà ma dipende se il tuo è un esercizio o altro), un database relazionale, un file a tua completa gestione, l'utilizzo di un web service che gestirà gli utenti su un server.
    Non so .... devi saperlo tu.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La questione è posta male ... non conta la variabile (né il suo nome). Hai istanziato un oggetto Utente, hai settato alcune sue proprietà ma .. non vedo altro uso. Cosa vuoi farne?
    Se vuoi gestire più utenti devi avere una "base dati" degli utenti. Una collezione in memoria (poco sensato nella realtà ma dipende se il tuo è un esercizio o altro), un database relazionale, un file a tua completa gestione, l'utilizzo di un web service che gestirà gli utenti su un server.
    Non so .... devi saperlo tu.
    Grazie per la risposta.

    Il fatto è che non abbiamo trattato le basi di dati in java ma i comandi basilari per gestire i file. Quindi per memorizzare una collezione di utenti devo utilizzare i file, oppure li memorizzo in un ArrayList ?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Quindi per memorizzare una collezione di utenti devo utilizzare i file, oppure li memorizzo in un ArrayList ?
    Ribadisco che io non posso saperlo/stabilirlo ... devi vedere cosa ti è stato richiesto di fare, con quali vincoli e/o requisiti, ecc...

    Qualunque "base dati" sceglierai, chiaramente struttura le cose con il giusto design a livello di classi/interfacce. Cioè separa i concetti, non fare classi che fanno "troppe" cose, ecc... Chiaramente sempre secondo le tue competenze attuali e cosa ti è stato chiesto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.