/ / Використання GridBagConstraint.anchor = ПІВНІЧНО для двох елементів - java, swing, gridbaglayout

Використання GridBagConstraint.anchor = NORTH для двох елементів - java, swing, gridbaglayout

Я хочу встановити два елементи в GridBagLayout один на одного, і обидва повинні знаходитися у верхній частині макета (другий елемент повинен починатися внизу першого елемента).

Крім того, другий елемент заповнить простір донизу.

The gbc.anchor = GridBagConstraint.NORTH працює для першого елемента, але другий елемент не пристане до верхньої частини вільного простору. Натомість він прилипає до верхньої частини другої половини макета.

скріншот

Це мій код:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestFrame extends JFrame{

public TestFrame(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();

gbc.anchor = GridBagConstraints.NORTH;
gbc.weighty = 1.0;

JPanel one = new JPanel();
one.setPreferredSize(new Dimension(200,200));
one.setBorder(BorderFactory.createLineBorder(Color.BLACK));

JPanel two = new JPanel();
two.setPreferredSize(new Dimension(200,200));
two.setBorder(BorderFactory.createLineBorder(Color.BLACK));

this.add(one, gbc);

gbc.gridy = 1;
gbc.fill = GridBagConstraints.VERTICAL;

this.add(two, gbc);

this.pack();
this.setVisible(true);
}

public static void main(String[] args){
new TestFrame();
}
}

Відповіді:

0 для відповіді № 1

Я щойно знайшов рішення: Якщо я встановлю wheighty першого елемента до 0.0 і тільки weighty другого елемента до 1.0 це працює за планом.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestFrame extends JFrame{

public TestFrame(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();

gbc.anchor = GridBagConstraints.NORTH;
gbc.weighty = 0.0;

JPanel one = new JPanel();
one.setPreferredSize(new Dimension(200,200));
one.setBorder(BorderFactory.createLineBorder(Color.BLACK));

JPanel two = new JPanel();
two.setPreferredSize(new Dimension(200,200));
two.setBorder(BorderFactory.createLineBorder(Color.BLACK));

this.add(one, gbc);

gbc.gridy = 1;
gbc.weighty = 0.0;
gbc.fill = GridBagConstraints.VERTICAL;

this.add(two, gbc);

this.pack();
this.setVisible(true);
}

public static void main(String[] args){
new TestFrame();
}
}