Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    scelta del miglior layout manager

    Salve ragazzi, ho un JTabbedPane e ogni tab ha come component un panello con il GridLayout(1,1) in modo che occupi tutto lo spazio disponibile...e fino qui nessun problema...
    in questo JPanel voglio mettercene un altro per la costruzione di un form...la mia idea era mettere un pannello BoxLayout(this, BoxLayout.Y_AXIS) e poi inserire in questo pannello tanti altri pannelli (uno per riga) ogniuno dei quali con un semplice FlowLayout mette JLabel e JTextField....il problema è che non riesco proprio a capire come settare l'altezza di questi pannelli....
    provo a spiegarmi meglio con un po' di pseudocodice:
    codice:
    class PannelloTab con GridLayout{
    this.add(new PannelloInterno());
    }
    class PannelloInterno con BoxLayout(this, BoxLayout.Y_AXIS){
    
    class PannelloRiga con FlowLayout{
    this.add(new JLabel("etichetta"));
    this.add(new JTextField(20));
    }
    
    this.add(new PannelloRiga());
    this.add(new PannelloRiga());
    
    }
    il problema è che pannello riga occupa 1/2 dell'altezza disponibile e tutta la larghezza...
    ovviamente se al posto di pannello Riga aggiungo 2 JButton li trovo posizionati correttamente secondo il BoxLayout....
    come posso fare?

    se non sono stato chiaro ditemelo che ci riprovo in altri termini

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    farà schifo dal punto di vista della sintassi ma io uso sempre il FlowLayout..
    così ho sempre tutto allineato..
    gioco gli spazi vuoti o l'altezza tra le righe con dei label vuoti..
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da morphy79
    farà schifo dal punto di vista della sintassi ma io uso sempre il FlowLayout..
    così ho sempre tutto allineato..
    gioco gli spazi vuoti o l'altezza tra le righe con dei label vuoti..
    in che senso? io ho bisogno che un Panel occupi l'intera larghezza e l'altezza sia quella minima per contenere gli elementi al suo interno

    non riesco proprio a fare sta cosa

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

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

    Re: scelta del miglior layout manager

    Originariamente inviato da oronze
    il problema è che pannello riga occupa 1/2 dell'altezza disponibile e tutta la larghezza...
    ovviamente se al posto di pannello Riga aggiungo 2 JButton li trovo posizionati correttamente secondo il BoxLayout....
    come posso fare?
    La questione è che BoxLayout rispetta anche il "maximum size" dei componenti. E un JPanel per default ha un maximum size enorme.

    Vedi se così inizia a piacerti di più (e nota le ultime 2 righe del costruttore di PannelloRiga):
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(500, 300);
    
            JTabbedPane tabbed = new JTabbedPane();
    
            JPanel tabPanel = new JPanel(new GridLayout(1, 1));
            JPanel internalPanel = new JPanel();
            internalPanel.setLayout(new BoxLayout(internalPanel, BoxLayout.Y_AXIS));
    
            internalPanel.add(new PannelloRiga());
            internalPanel.add(new PannelloRiga());
    
            tabPanel.add(internalPanel);
    
            tabbed.addTab("one", tabPanel);
            getContentPane().add(tabbed);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    
    class PannelloRiga extends JPanel {
        public PannelloRiga() {
            super(new FlowLayout(FlowLayout.LEFT));
            add(new JLabel("etichetta"));
            add(new JTextField(20));
            setMaximumSize(getPreferredSize());
            setAlignmentX(Component.LEFT_ALIGNMENT);
        }
    }
    Però prova a ridimensionare la finestra che sia piccola, vedi che i text field vanno "a capo" (dovuto al FlowLayout) ma sono "troncati" (dovuto al maximum size).
    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 L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    grazie 1000 per l'esempio che ho studiato ma non mi convinceva il fatto che si "spezzavano" i campi di testo....mi è venuta "un'illuminazione"
    ho risolto con una cosa tipo questa
    codice:
    class BranoPanel{
    ...
    		SpringLayout layout = new SpringLayout();
    		this.setLayout(layout);
    		JPanel riga1 = new JPanel();
    		riga1.add(new JLabel("Titolo"));
    		BranoPanel.titolo = new JTextField(50);
    		riga1.add(titolo);
    		this.add(riga1);
    		layout.putConstraint(SpringLayout.WEST, riga1, 5, SpringLayout.WEST, this);
    		layout.putConstraint(SpringLayout.NORTH, riga1, 5, SpringLayout.NORTH, this);
    
    		JPanel riga2 = new JPanel();
    		riga2.add(new JLabel("casa"));
    		BranoPanel.titolo = new JTextField(5);
    		riga2.add(titolo);
    		this.add(riga2);
    		layout.putConstraint(SpringLayout.WEST, riga2, 5, SpringLayout.WEST, this);
    		layout.putConstraint(SpringLayout.NORTH, riga2, 3, SpringLayout.SOUTH, riga1);
    }
    non è il massimo ma lo preferisco :-P

    ora sto distruggendo il monitor a testate per JScrollPane che simpaticamente non funziona a meno che io non specifichi la preferredSize del BranoPanel che sto arbitrariamente settando come la dimensione del JFrame ma mi crea dei problemi se la finestra parte già piccola in precedenza

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

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.