Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Gestione Layout

  1. #1

    Gestione Layout

    Salve a tutti...

    Sto inizando adesso grazie all'uni a programmare in Java...

    Ho un piccolo problemino con la gestione dei layout...

    Vi spiego...devo realizzare un'interfaccia grafica utilizzando un BorderLayout dove in NORTH metto un titolo, in WEST una specie di tabella e in CENTER tutta una serie di bottoni per realizzare una serie di operazioni...

    Problema con WEST: in questa parte devo fare una specie di tabella, con due label come titolo, e poi continuare ad aggiungere label di dati... (intanto così, poi casomai considererò di usare una tabella). Per fare questo uso, all'interno di WEST, un JPanel dove setto come Layout Manager un GridLayout. Il problema è che il risultato che ottento è che le due label del titolo non si piazzano in alto alla parte WEST, ma esattamente in mezzo...Come posso fare per farle partire dall'alto???

    Problema con CENTER: l'esatto opposto di quello sopra...Voglio mettere un bottone della mia dimensione al centro...Per farlo uso un JPanel con FlowLayout...Il punto è che questa volta il bottone finisce in alto anzichè in mezzo...

    Come posso fare??

    Grazie mille a tutti...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Gestione Layout

    Originariamente inviato da lizard88mc
    Problema con WEST: in questa parte devo fare una specie di tabella, con due label come titolo, e poi continuare ad aggiungere label di dati... (intanto così, poi casomai considererò di usare una tabella). Per fare questo uso, all'interno di WEST, un JPanel dove setto come Layout Manager un GridLayout. Il problema è che il risultato che ottento è che le due label del titolo non si piazzano in alto alla parte WEST, ma esattamente in mezzo...Come posso fare per farle partire dall'alto???
    Innanzitutto GridLayout con quante righe/colonne??

    Originariamente inviato da lizard88mc
    Problema con CENTER: l'esatto opposto di quello sopra...Voglio mettere un bottone della mia dimensione al centro...Per farlo uso un JPanel con FlowLayout...Il punto è che questa volta il bottone finisce in alto anzichè in mezzo...
    No, con FlowLayout non puoi farlo andare centrato verticalmente.
    Puoi "giocare" sull'uso di Box (o direttamente un BoxLayout) sfruttando anche dei "glue" (Box.createHorizontalGlue() o Box.createVerticalGlue()).

    codice:
    Box centerBox = new Box(BoxLayout.X_AXIS);
    centerBox.add(Box.createHorizontalGlue());
    centerBox.add(new JButton("aaa"));
    centerBox.add(Box.createHorizontalGlue());
    Aggiungi centerBox nella parte CENTER del tuo BorderLayout.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Gestione Layout

    Originariamente inviato da andbin
    Innanzitutto GridLayout con quante righe/colonne??
    Il numero di colonne è 2...Il numero di righe è variabile e dipende da quante cose devide di aggiungere l'utente...Può essere una come 20...

    Originariamente inviato da andbin
    No, con FlowLayout non puoi farlo andare centrato verticalmente.
    Puoi "giocare" sull'uso di Box (o direttamente un BoxLayout) sfruttando anche dei "glue" (Box.createHorizontalGlue() o Box.createVerticalGlue()).

    codice:
    Box centerBox = new Box(BoxLayout.X_AXIS);
    centerBox.add(Box.createHorizontalGlue());
    centerBox.add(new JButton("aaa"));
    centerBox.add(Box.createHorizontalGlue());
    Aggiungi centerBox nella parte CENTER del tuo BorderLayout.
    Ottimo..funziona...avevo considerato tutti i + normali layoutManager ma zero proprio...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Gestione Layout

    Originariamente inviato da lizard88mc
    Il numero di colonne è 2...Il numero di righe è variabile e dipende da quante cose devide di aggiungere l'utente...Può essere una come 20...
    Ok, comunque la questione è un'altra. Nella parte WEST (come EAST) BorderLayout non considera il preferred height del componente (nel tuo caso il JPanel) e gli fa usare tutto lo spazio verticale possibile.
    Con un GridLayout che inizialmente contiene 2 colonne (le tue 2 JLabel con i titoli) in 1 riga, allora vuol dire che la riga occupa tutto lo spazio verticale. E siccome JLabel mostra per default il testo centrato in verticale .... le vedi appunto centrate verticalmente.
    Hai la "visione" di cosa ti è successo, ora?

    La soluzione? Usare 2 JPanel innestati: il pannello che metti direttamente in WEST ha un BorderLayout. Dentro questo pannello, nota, nella parte NORTH (che rispetta il preferred height, quindi sta al "giusto" in altezza) metti un altro pannello che ha il GridLayout.

    codice:
    JPanel westPanel = new JPanel(new BorderLayout());
    JPanel gridPanel = new JPanel(new GridLayout(0, 2));
    westPanel.add(gridPanel, BorderLayout.NORTH);
    
    gridPanel.add(new JLabel("T1"));
    gridPanel.add(new JLabel("T2"));
    gridPanel.add(new JLabel("aaa"));
    gridPanel.add(new JLabel("bbb"));
    Quando usi i layout manager devi "giocare" molto su questo tipo di composizioni. Ricordalo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: Gestione Layout

    Originariamente inviato da andbin
    Ok, comunque la questione è un'altra. Nella parte WEST (come EAST) BorderLayout non considera il preferred height del componente (nel tuo caso il JPanel) e gli fa usare tutto lo spazio verticale possibile.
    Con un GridLayout che inizialmente contiene 2 colonne (le tue 2 JLabel con i titoli) in 1 riga, allora vuol dire che la riga occupa tutto lo spazio verticale. E siccome JLabel mostra per default il testo centrato in verticale .... le vedi appunto centrate verticalmente.
    Hai la "visione" di cosa ti è successo, ora?

    La soluzione? Usare 2 JPanel innestati: il pannello che metti direttamente in WEST ha un BorderLayout. Dentro questo pannello, nota, nella parte NORTH (che rispetta il preferred height, quindi sta al "giusto" in altezza) metti un altro pannello che ha il GridLayout.

    codice:
    JPanel westPanel = new JPanel(new BorderLayout());
    JPanel gridPanel = new JPanel(new GridLayout(0, 2));
    westPanel.add(gridPanel, BorderLayout.NORTH);
    
    gridPanel.add(new JLabel("T1"));
    gridPanel.add(new JLabel("T2"));
    gridPanel.add(new JLabel("aaa"));
    gridPanel.add(new JLabel("bbb"));
    Quando usi i layout manager devi "giocare" molto su questo tipo di composizioni. Ricordalo.
    ok...capito + o meno il senso...certo che però potevano farle un attimo + semplici queste librerie grafiche...come ad esempio un bel metodo setVerticalAlign(TOP)...sarebbe tutto molto + semplice...grazie mille cmq...adesso vedo come me la cavo... :master:

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.