Non riesco a capire con precisione cosa e come usare i GridBagConstraints. Come-is vs. dovrebbe essere

StackOverflow https://stackoverflow.com/questions/5871817

  •  28-10-2019
  •  | 
  •  

Domanda

Sto scherzando con la gridbaglayout. L'ho capito in qualche modo, quindi sono stato in grado di creare questo layout. Ma i miei come non sono abbinati al mio dovrebbe essere. Ecco gli schermi.

Come è :(As-Is :(

Should Be :s
Dovrebbe essere: s

Capisco che devo modificarlo un po 'in modo che la dimensione sia impostata (setSize()). Ma il vero complicato è ottenere il "Aggiungi contatto" JLabel essere al centro nella parte superiore.
Aspettando le tue risposte. Grazie in anticipo.

Ecco il mio codice

package SimpleCRUD;

import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class ContactListFrame extends JFrame{
    JButton Button1, Button2;
    JTextField textField1, textField2, textField3;
    JLabel label1, label2, label3 , label4;
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints Constraint = new GridBagConstraints();

    public ContactListFrame() {
        super("All Contacts");
        Button1 = new JButton("Add");
        Button2 = new JButton("Cancel");
        textField1 = new JTextField(15);
        textField2 = new JTextField(15);
        textField3 = new JTextField(15);
        label4 = new JLabel("Add Contact");
        label4.setFont (new Font("fallan", 1, 25));
        label1 = new JLabel("First Name:");
        label2 = new JLabel("Last Name:");
        label3 = new JLabel("Phone Number:");

        setLayout(layout);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(400, 200);
        setResizable(false);
        Constraint.fill = GridBagConstraints.NONE;
        Constraint.anchor = GridBagConstraints.NORTH;
        addComponent(label4, 0, 1, 1, 1);
        addComponent(textField1, 1, 1, 1, 1);
        addComponent(textField2, 2, 1, 1, 1);
        addComponent(textField3, 3, 1, 1, 1);
        addComponent(label1, 1, 0, 1, 1);
        addComponent(label2, 2, 0, 1, 1);
        addComponent(label3, 3, 0, 1, 1);
        addComponent(Button1, 4, 0, 2, 1);
        addComponent(Button2, 4, 1, 2, 1);
    }

    public void addComponent (Component comp, int row, int col, int width, int height){
        Constraint.gridx = col;
        Constraint.gridy = row;
        Constraint.gridwidth = width;
        Constraint.gridheight = height;
        layout.setConstraints(comp, Constraint);
        add(comp);
    }

}
È stato utile?

Soluzione

Se dai un'occhiata al Documentazione di GridBaglayout, c'è un ottimo esempio di utilizzo di GridBagConstraints.

Ecco il tuo codice modificato per utilizzare GridBagConstraints

import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class ContactListFrame extends JFrame{
    JButton Button1, Button2;
    JTextField textField1, textField2, textField3;
    JLabel label1, label2, label3 , label4;
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints Constraint = new GridBagConstraints();

    public ContactListFrame() {
        super("All Contacts");
        Button1 = new JButton("Add");
        Button2 = new JButton("Cancel");
        textField1 = new JTextField(15);
        textField2 = new JTextField(15);
        textField3 = new JTextField(15);
        label4 = new JLabel("Add Contact");
        label4.setFont (new Font("fallan", 1, 25));
        label1 = new JLabel("First Name:");
        label2 = new JLabel("Last Name:");
        label3 = new JLabel("Phone Number:");

        setLayout(layout);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 200);
        setResizable(false);
        Constraint.fill = GridBagConstraints.BOTH;
        Insets ins = new Insets(5, 5, 5, 5);
        Constraint.insets = ins;//this does the padding
        Constraint.weightx = 0.0;
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(label4, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label1, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField1, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label2, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField2, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(label3, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(textField3, Constraint);
        Constraint.gridwidth = GridBagConstraints.RELATIVE;//next to last component
        add(Button1, Constraint);
        Constraint.gridwidth = GridBagConstraints.REMAINDER;//end row
        add(Button2, Constraint);
    }        

    public static void main(String args[]) {
      new ContactListFrame().setVisible(true);
    }
}

L'output sembra così

enter image description here

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