Domanda

Sto usando un GridBagLayout a (attualmente) di visualizzazione di due righe. Sono consapevole questo layout è eccessivo per questo compito, ma sto cercando di imparare a usarlo. Il problema è che ho aggiunto i due pannelli ai due file separati e non v'è un enorme spazio intorno al contenuto (vedere l'immagine e il codice di seguito): alt text http://www.imagechicken.com/uploads/1264533379009864500.png

Image background;
    public Table(){
        super();
        ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
        background = ii.getImage();
        setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);

        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;

        JButton button = new JButton("hello world");
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,100));
        panel1.add(button, BorderLayout.CENTER);
        panel1.setBackground(Color.yellow);
        add(panel1, constraints);

        constraints.gridx = 0;
        constraints.gridy = 1;

        JPanel middlePanel = new JPanel();
        middlePanel.setPreferredSize(new Dimension(800,350));
        middlePanel.add(button, BorderLayout.CENTER);
        middlePanel.setBackground(Color.blue);
        add(middlePanel, constraints);


    }
È stato utile?

Soluzione

Purtroppo, con GridBagLayout, se il contenuto non riempiono l'intero contenitore che è in, si centrerà automaticamente tutti i suoi contenuti nel contenitore. È per questo che si stanno ottenendo davvero un grande divario.

Ci sono essenzialmente due modi per risolvere questo:

  1. Il modo più duro: Fiddle con il GridBagConstraints. Ho avuto un successo limitato con questo quando si cerca di evitare il comportamento di centro-ing.
  2. Il modo più semplice:. Mettere il GridBagLayout interno di un FlowLayout, e quindi impostare l'allineamento del FlowLayout a in alto a sinistra, o qualsiasi altra cosa che si desidera

ho chiesto, e ha risposto, questa domanda io stesso qualche volta la settimana scorsa.

Quindi nel tuo caso si sta aggiungendo il vostro panel1 e middlePanel direttamente al JFrame (?), Con un GridBagLayout

JFrame (GridBagLayout)
 - panel1
 - middlePanel

Vorrei suggerire questa struttura alternativa, invece, per sbarazzarsi di tutto lo spazio extra (e l'allineamento al centro e, se vi piace).

JFrame (FlowLayout)
 - JPanel (GridBagLayout)
   - panel1
   - middlePanel

HTH

Altri suggerimenti

Usa

constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;

JavaDoc per weightx / weighty dice:

  

Specifica come distribuire spazio orizzontale / verticale.

JavaDoc per fill:

  

Questo campo è utilizzato quando l'area di visualizzazione del componente è più grande   del formato richiesto del componente. Determina se   ridimensionare il componente, e se sì, come.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top