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

    [Java] Impostare Inset ad un JPanel

    Ciao,
    io ho fatto il seguente codice di prova di un BoxLayout

    codice:
    package boxlayoutexample;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.SwingUtilities;
    
    /**
     *
     * @author utente
     */
    public class BoxLayoutExample extends JFrame {
    
        public BoxLayoutExample() {
            super("Esempio di BoxLayout");
            Color colore = new Color(200, 210, 222);
            Container contentPane = this.getContentPane();
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setPreferredSize(new Dimension(400, 300));
            contentPane.setBackground(colore);
            // Panel
            JPanel pannelloPrimaRiga = new JPanel();
            pannelloPrimaRiga.setLayout(new BoxLayout(pannelloPrimaRiga, BoxLayout.LINE_AXIS));
            pannelloPrimaRiga.setAlignmentX(Component.LEFT_ALIGNMENT);
            JLabel label11 = new JLabel("Prima riga prima etichetta");
            JLabel label12 = new JLabel("Prima riga seconda etichetta");
            label11.setAlignmentX(Component.LEFT_ALIGNMENT);
            label12.setAlignmentX(Component.LEFT_ALIGNMENT);
            pannelloPrimaRiga.add(label11);
            pannelloPrimaRiga.add(Box.createRigidArea(new Dimension(15, 0)));
            pannelloPrimaRiga.add(label12);
            JPanel pannelloSecondaRiga = new JPanel();
            pannelloSecondaRiga.setAlignmentX(Component.LEFT_ALIGNMENT);
            pannelloSecondaRiga.setLayout(new BoxLayout(pannelloSecondaRiga, BoxLayout.LINE_AXIS));
            JLabel label21 = new JLabel("Seconda riga prima etichetta");
            JLabel label22 = new JLabel("Seconda riga seconda etichetta");
            pannelloSecondaRiga.add(label21);
            pannelloSecondaRiga.add(Box.createRigidArea(new Dimension(15, 0)));
            pannelloSecondaRiga.add(label22);
            JPanel panel = new JPanel();
            panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
            panel.add(pannelloPrimaRiga);
            panel.add(Box.createRigidArea(new Dimension(0, 10)));
            panel.add(pannelloSecondaRiga);
            JPanel p = new JPanel(new BorderLayout());
            p.add(panel, BorderLayout.CENTER);
            JScrollPane scrollPane = new JScrollPane(p);
            contentPane.add(scrollPane, BorderLayout.CENTER);
            this.pack();
            this.setLocationRelativeTo(null);
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            SwingUtilities.invokeLater(new Runnable() {
    
                public void run() {
                    BoxLayoutExample frame = new BoxLayoutExample();
                    frame.setVisible(true);
                }
            });
        }
    }
    Però il tutto mi viene portato a ridosso del bordo del JFrame.
    C'è un modo per dare al content pane una specie di margine?
    Grazie.

    EDIT: ho risolto estendendo AbstractBorder e facendogli ritornare l'Insets voluto.
    Ma c'è un metodo più diretto?
    al volante son nervoso

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

    Re: [Java] Impostare Inset ad un JPanel

    Originariamente inviato da Rubox
    Però il tutto mi viene portato a ridosso del bordo del JFrame.
    C'è un modo per dare al content pane una specie di margine?
    Tutti i componenti Swing (da JComponent in giù) hanno un setBorder(Border). E puoi creare vari tipi di bordi tramite BorderFactory.

    Il content pane di default tecnicamente è un JPanel, quindi potresti prenderlo "vedendolo" come JPanel e fare un setBorder. Ma in genere è preferibile (almeno per me) creare prima un JPanel che conterrà il tutto e da mettere poi come unico figlio del content pane.
    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
    Feb 2009
    Messaggi
    502
    Sì, sto facendo in questo modo.
    Poiché ho modificato il background di tutti i componenti volevo anche personalizzare un pochino i bordi.
    Estendo la AbstractBorder e modifico li tutti i parametri che mi servono.
    al volante son nervoso

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    Estendo la AbstractBorder e modifico li tutti i parametri che mi servono.
    Scusa ... quali parametri? Devi solo fare dello "spazio" attorno ad un componente? Usa un EmptyBorder.
    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
    Feb 2009
    Messaggi
    502
    Originariamente inviato da andbin
    Scusa ... quali parametri? Devi solo fare dello "spazio" attorno ad un componente? Usa un EmptyBorder.
    Me lo dico da solo: Rubox fatti un giro nelle javadocs prima di postare
    al volante son nervoso

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.