Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    107

    Ridimensionare Pannelli

    Ciao a tutti!!
    Io ho un JPanel principale con un LayoutManeger BorderLayout, a questo aggiungo tre pannelli, uno a nord uno al centro e uno a sud. Il Pannello centrale è un JScrollPane che è il contenitore di un JPanel (panel1) con BoxLayout verticale al quale aggiungo altri pannelli contenenti dei JLabel e ogniuno di questi pannelli aggiunti ha un BoxLayout orizzontale. Vorrei che i pannelli che aggiungo a panel 1 avessero tutti la stessa dimensione e che se il contenuto di questi pannelli non c'entra al suo interno fossero allora anche ridimensionabili, non so magari spostando con il mouse il bordo del pannello in modo da vedere l'intero contenuto. Oppure poter avere un barra di scorrimento orizzontale in fondo al JPanel panel1 in modo da scorrerla per vedere il contenuto dei pannelli inseriti in panel1.
    Come posso fare???? Aiutoooo!!!!!!!!

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

    Re: Ridimensionare Pannelli

    I tuoi layout sono sempre così terribilmente complessi ..... e la spiegazione così macchinosa ....

    Originariamente inviato da Azzurra85
    Vorrei che i pannelli che aggiungo a panel 1 avessero tutti la stessa dimensione
    dimensione quale? Una predefinita che imponi tu? O che sia la maggiore dimensione tra quelle di tutti i pannelli? O che dipenda da altro?

    Originariamente inviato da Azzurra85
    e che se il contenuto di questi pannelli non c'entra al suo interno fossero allora anche ridimensionabili, non so magari spostando con il mouse il bordo del pannello in modo da vedere l'intero contenuto.
    non entra all'interno di cosa??? Tieni presente che tutto quanto è dentro un JScrollPane e lui determina la dimensione da gestire usando il preferred size del pannello contenuto (panel1).
    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
    Aug 2007
    Messaggi
    107
    Vorrei che i pannelli inseriti in panel1 avessore come width quella del panel1 e come heigth una definita da me, più piccola dell'altezza del panel1.
    L'effetto che vorrei è dividere il panel1 in righe.
    Suppondendo che inserisco in panel1, i pannelli pannel2 e panel3. A sua volta ai panel2 e panel3 vengono aggiunti dei JLabel, ma se sforo la dimensione dei panel2 e panel3 vorrei poter vedere in qualche modo tutto il contenuto dei panel2 e panel3 e non ci riesco!!!!

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

    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300, 300);
    
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
    
            JScrollPane scrollPane = new JScrollPane(mainPanel);
    
            mainPanel.add(creaPanel(4));
            mainPanel.add(creaPanel(2));
            mainPanel.add(creaPanel(6));
    
            getContentPane().add(scrollPane);
        }
    
        public JPanel creaPanel(int numButton) {
            JPanel p = new JPanel();
            p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
            p.setAlignmentX(Component.LEFT_ALIGNMENT);
            p.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
    
            for (int i = 0; i < numButton; i++) {
                JButton b = new JButton(Integer.toString(i+1));
                p.add(b);
            }
    
            return p;
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    TestFrame f = new TestFrame();
                    f.setVisible(true);
                }
            });
        }
    }
    Ho messo un bordino rosso ai panel per evidenziarne la dimensione. Come puoi vedere se lo lanci, ognuno dei tre panel ha una dimensione "giusta" per contenere appena i button.

    Se vuoi che i panel abbiano la stessa larghezza del panel principale (se più largo dei panel contenuti), prova ora a mettere questo codice appena prima del return p;

    codice:
            Dimension maxSize = p.getMaximumSize();
            maxSize.width = Integer.MAX_VALUE;
            p.setMaximumSize(maxSize);
    Con questa modifica, se il panel principale è molto più largo dello spazio occupato dai pulsanti, i pannelli si espandono al massimo possibile orizzontalmente. Se invece restringi la finestra, si arriva ad avere il panel principale più piccolo dello spazio occupato dai pulsanti e quindi compare la scrollbar orizzontale.
    È questo che volevi o no??

    Se poi vuoi che ognuno dei pannelli abbia una certa altezza da te imposta, allora imposta il "preferred size" (solo l'altezza chiaramente).

    Se non è questo ciò che vuoi ... allora rispiega meglio che non ho capito una mazza.
    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
    Aug 2007
    Messaggi
    107
    Grazie mille, era proprio quello che volevo ottenere!!!
    Ma ora per aggiungere un'altezza diversa, come devo fare???? Mi hai detto che devo usare setPreferredSize impostando solo l'altezza. Io ho aggiunto dopo p.setMaximumSize() maxSize.heigth = 25 e poi p.setPreferredSize(maxSize) ma non funziona???

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    107
    Ho risolto impostando oltre a maxSize.width anche maxSize.heigth e poi chiamando p.setMaximumSize(maxSize).
    Grazie ancora!!!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Azzurra85
    Ho risolto impostando oltre a maxSize.width anche maxSize.heigth e poi chiamando p.setMaximumSize(maxSize).
    Grazie ancora!!!
    Tieni però presente che il BoxLayout funziona così: viene usato il "maximum" solo se c'è spazio disponibile ... se non c'è spazio disponibile, il minimo è dato dal "preferred".

    Se vuoi capire meglio, metti nel mio sorgente prima del return:

    codice:
            Dimension prefSize = p.getPreferredSize();
            prefSize.height = 40;
            p.setPreferredSize(prefSize);
    
            Dimension maxSize = p.getMaximumSize();
            maxSize.width = Integer.MAX_VALUE;
            maxSize.height = 80;
            p.setMaximumSize(maxSize);
    Lancia e vedrai che i pannelli sono dimensionati al massimo in orizzontale e a 80 (maximum height) in verticale. Ora ridimensiona solo verticalmente la finestra, vedrai che non compare subito la scrollbar verticale!!! I pannelli si restringono in verticale. Quando l'altezza dei pannelli arriva al preferred height, allora se restringi ancora di più in verticale compare la scrollbar verticale.

    Più chiaro ora?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    107
    Grazie mille, adesso è molto più chiaro!!!

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.