Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81

    Sezioni fisse con borderLayout

    Salve, come da oggetto vorrei chiedervi un consiglio su come avere delel sezioni fisse usando il borderLayout.
    Mi spiego meglio.
    Il borderLayout divide il contenitore in 5 parti...io vorrei usare per dire la parte superiore in modo che sia ad una grandezza fissa e non che si ridimensiona in base a quello che metto dentro.

    E' possibile?

    Per esempio vorrei mettere una textarea e quando provo a farlo, la sezione nord del borderLayout si ridimensiona in base al testo della textarea.

    Ho provato mettere altri pannelli interni alla sezione nord o a cambiare layout manager in quella sezione ma niente...

    Vi ringrazio anticipatamente

    Mi è stato consigliato di aggiungere un nuovo pannello al nord con un suo layout (il flowlayout per esempio) e settare la dimensione della JTextArea

    ho fatto qualche prova ma niente. Posto anche il codice:

    codice:
    import java.awt.BorderLayout;
        import java.awt.FlowLayout;
     
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        import javax.swing.JTextArea;
     
        public class testFrame extends JFrame {
     
           public testFrame(){
              super( "Server" );
              JTextArea txtInfo = new JTextArea("Informazioni");
              txtInfo.setSize(400, 100);
              JPanel panelInfo = new JPanel(new FlowLayout());
              panelInfo.add(txtInfo);
             
             
             
              JPanel PannelloPincilale = new JPanel();
              PannelloPincilale.setLayout(new BorderLayout(5,5));
              PannelloPincilale.add(panelInfo, BorderLayout.NORTH);      
                   
              add(PannelloPincilale);
              pack();
           }
           
           public static void main(String[] args) {
               testFrame application = new testFrame(); // create server
               application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
               application.setVisible(true);
               application.setSize(500, 500);
               application.setResizable(false);
     
           }
     
        }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Inserisci la JTextArea all'interno di un JScrollPane...

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class AreaSopra extends JFrame {
       private JTextArea txt;
    
       public AreaSopra() {
          Container c = getContentPane();
          c.setLayout( new BorderLayout() );
    
          txt = new JTextArea();
          txt.setPreferredSize( new Dimension(800, 80) );
          JScrollPane jsp = new JScrollPane( txt );
          c.add(jsp, BorderLayout.NORTH);
    
          setTitle("Test TextArea NORTH");
          setSize(800, 600);
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setVisible( true );
       }
    
       public static void main(String[] args) {
          AreaSopra a = new AreaSopra();
       }
    }
    Nell'esempio ho dimensionato la JTextArea in modo che fosse un po' più grande della dimensione standard (una sola riga, se vuota).

    JTextArea è progettata per essere "scrollabile"... questo significa che modifica la sua preferredSize in base al contenuto... se il contenuto cambia, cambia anche la sua PreferredSize e BorderLayout, per i componenti laterali, tiene conto proprio del PreferredSize. Di conseguenza, all'aumentare delle righe, aumenta l'altezza preferita del componente e BorderLayout si comporta di conseguenza.

    Il JScrollPane risolve il problema.

    PS: quando posti del codice, usa gli appositi tag CODE per mantenerne formattazione ed indentazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    Grazie Lele delle risp. Tuttavia non ho ancora risolto il prob del tutto anche se siamo sulla buona strada. La chiave è il "setPreferredSize" al posto del "setSize" che ho utilizzato nelle mie prove. Per quanto riguarda il JScrollPane, è ovvio che lo avrei inserito ma per il momento mi interessava sapere come tenere fissa la sezione.

    Nel tuo esempio rimane fissa la sezione MA quando scrivo nella JtextArea e supero lo spazio degli "a capo", non vedo più quello che c'è dotto...

    Allora mi chiedo.. a cosa serve il JScroolPane se poi non posso scrollare il testo in più? E' proprio questo quello che mi serve

    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Errore mio.
    Il PreferredSize va, ovviamente, impostato sul JScrollPane e non sulla JTextArea.
    E' il JScrollPane, infatti, che viene aggiunto alla finestra, non la JTextArea... di conseguenza, è il JScrollPane che viene influenzato dal LayoutManager e non la JTextArea.

    Riposto l'esempio corretto.

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class AreaSopra extends JFrame {
       private JTextArea txt;
    
       public AreaSopra() {
          Container c = getContentPane();
          c.setLayout( new BorderLayout() );
    
          txt = new JTextArea();
          JScrollPane jsp = new JScrollPane( txt );
          jsp.setPreferredSize( new Dimension(800, 80) );
          c.add(jsp, BorderLayout.NORTH);
    
          setTitle("Test TextArea NORTH");
          setSize(800, 600);
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setVisible( true );
       }
    
       public static void main(String[] args) {
          AreaSopra a = new AreaSopra();
       }
    }
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    OTTIMO LELE, grazie tante.

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.