Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    45

    frame a dimensione variabile

    Si può fare un frame la cui dimensione dipenda dal contenuto? Io ho ho un frame con dentro una scaccheria di dimensione variabile. Chiaramente non ha senso che il frame abbia dimensione enorme se la scacchiera è piccola e allo stesso tempo non deve essere piccolo quando la scacchiera è grande. Il problema è che la dimensione della scacchiera viene decisa dai parametri dell'utente che in pratica dice il numero di caselle della scacchiera e chiaramente questo avviene dopo che il frame è stato creato...
    Grazie a chi risponde

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

    Re: frame a dimensione variabile

    Originariamente inviato da a_riz
    Si può fare un frame la cui dimensione dipenda dal contenuto? Io ho ho un frame con dentro una scaccheria di dimensione variabile. Chiaramente non ha senso che il frame abbia dimensione enorme se la scacchiera è piccola e allo stesso tempo non deve essere piccolo quando la scacchiera è grande. Il problema è che la dimensione della scacchiera viene decisa dai parametri dell'utente che in pratica dice il numero di caselle della scacchiera e chiaramente questo avviene dopo che il frame è stato creato...
    Se fai un pack() sul frame, esso viene dimensionato per adattarsi in base al "preferred size" dei componenti contenuti.
    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
    Nov 2007
    Messaggi
    45
    Non riesco bene a capire come funzioni questo metodo. Come si definiscono le "preferred size" ? Se mi limito a chiamare il metodo mi azzera la dimensione del frame...

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

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        private JComboBox combo1;
        private JComboBox combo2;
        private JPanel gridPanel;
        private GridLayout gridLayout;
    
        public TestFrame() {
            super ("Test");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    
            Container contentPane = getContentPane();
    
            Object[] items = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
            combo1 = new JComboBox(items);
            combo2 = new JComboBox(items);
    
            JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
            p.add(combo1);
            p.add(combo2);
    
            gridLayout = new GridLayout();
            gridPanel = new JPanel(gridLayout);
    
            contentPane.add(p, BorderLayout.NORTH);
            contentPane.add(gridPanel, BorderLayout.CENTER);
    
            ActionListener actionListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    createGrid();
                }
            };
    
            combo1.addActionListener(actionListener);
            combo2.addActionListener(actionListener);
    
            createGrid();   // iniziale 1x1
        }
    
        private void createGrid() {
            Integer rows = (Integer) combo1.getSelectedItem();
            Integer cols = (Integer) combo2.getSelectedItem();
    
            gridPanel.removeAll();   // rimuove tutti i componenti
            gridLayout.setRows(rows);
            gridLayout.setColumns(cols);
    
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    gridPanel.add(new JButton((i+1) + "," + (j+1)));
                }
            }
    
            pack();   // pack sul frame
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    TestFrame f = new TestFrame();
                    f.setVisible(true);
                }
            });
        }
    }
    Seleziona qualcosa nelle combo e vedi che succede.

    NOTA: ho usato l'autoboxing/unboxing, quindi solo Java 5 o superiore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.