Domanda

  1. È possibile impostare un margine / riempimento in GridBagLayout per l'intera riga / colonna?Tuttavia, utilizzo l'inset sull'oggetto constraints, utilizzando questo approccio ho bisogno di impostare il padding dal basso su ogni singolo componente.

  2. È possibile riempire tutto il contenuto nel JFrame?Perché ora ogni componente è allineato con il telaio.

  constraints.weightx = 2;
  constraints.weighty = 1;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, questionPanel = new QuestionPanel(), 0, 0, 1, 1);

  constraints.weightx = 1;
  constraints.weighty = 1;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, categoryPanel = new CategoryPanel(), 0, 1, 1, 1);

  constraints.weightx = 1;
  constraints.weighty = 0;
  constraints.fill = GridBagConstraints.HORIZONTAL;
  addComponent(this, layout, constraints, answerPanel = new AnswerPanel(), 1, 0, 2, 1);

  constraints.weightx = 1;
  constraints.weighty = 2;
  constraints.fill = GridBagConstraints.BOTH;
  addComponent(this, layout, constraints, tabPane = new JTabbedPane(), 2, 0, 2, 1);

  constraints.weightx = 1;
  constraints.weighty = 0;
  constraints.fill = GridBagConstraints.NONE;
  constraints.anchor = GridBagConstraints.SOUTHEAST;
  addComponent(this, layout, constraints, buttonPanel = new ButtonPanel(), 3, 1, 1, 1);

Sto utilizzando un metodo privato addComponent:

private void addComponent(Container context, GridBagLayout _layout, GridBagConstraints            _constraints, Component component, int row, int column, int width, int height) {
  _constraints.gridx = column;
  _constraints.gridy = row;
  _constraints.gridwidth = width;
  _constraints.gridheight = height;

  _layout.setConstraints(component, _constraints);
  context.add(component);
 }

Come posso aggiungere un po 'di "aria (padding / margin)" tra le celle?

È stato utile?

Soluzione

Per quanto ne so, l'unico modo per eseguire il primo è impostare un oggetto Insets per ogni vincolo ... (Il layout della codifica manuale chiaramente non era progettato per essere facileJava: P)

Ma c'è un modo molto semplice per eseguire il secondo, senza perdere tempo con alcun Inset o altro: imposta il layout del contentPane su un FlowLayout con qualsiasi spazio verticale e orizzontale che desideri, aggiungi un pannello al contentPane e invecedi aggiungere tutto al contentPane, aggiungilo al tuo nuovo pannello.

Altri suggerimenti

Utilizza la proprietà inset della classe GridBagConstraints

Ad esempio:

GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(3,3,3,3);

Spero che questo sia quello che stai cercando.

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