GridBagLayout dwa małe pytania i problemy

GridBagLayout dwa małe pytania i problemy
krzysztof85
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Łódź
  • Postów:48
0

Koledzy mam dwa małe problem z GridBagLayout
1 - nie rozumiem działania weightx/weighty - wiem że służą do określania odległości pomiędzy elementami przy zmianie wielkości okna. Jednak nie zauważam jakiejś różnicy przy zmianie wartości poza tym że gdyż określę 0 to są blisko siebie a 1 i dodatkowo fill na both to wypełniają całkowicie wszystko. Pośrednie wartości nic nie zmieniają.
2 - drugi problem to okno w którym mam dwa panele dodane z siatka GridBagLaout i zmiana wielkości jednego panelu po dodaniu do niego komponentów. Jak mogę zablokować żeby wielkość się nie zmieniała, albo ominąć ten efekt.

Poniżej kod programu na którym testuję układ GridBagLayout.

Kopiuj
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

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

public class Testy {
	public static void main(String[] args) {
		Okno okno = new Okno();
		okno.setVisible(true);
	}
}

class Okno extends JFrame {
	public Okno() {
		setSize(300, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		add(new Panel());
	}
}

class Panel extends JPanel {
	public Panel() {

		GridBagLayout GBLd = new GridBagLayout();
		GridBagConstraints GBCd = new GridBagConstraints();
		setLayout(GBLd);

		GBCd.gridx = 0;
		GBCd.gridy = 0;
		GBCd.gridheight = 1;
		GBCd.gridwidth = 1;
		GBCd.fill = GridBagConstraints.BOTH;
		GBCd.weightx = 1;
		GBCd.weighty = 1;

		JPanel dane = new JPanel();
		dane.setBorder(BorderFactory.createLineBorder(Color.red));
		GBLd.setConstraints(dane, GBCd);
		this.add(dane);

		GBCd.gridx = 0;
		GBCd.gridy = 1;

		JPanel dane2 = new JPanel();
		dane2.setBorder(BorderFactory.createLineBorder(Color.green));
		GBLd.setConstraints(dane2, GBCd);
		this.add(dane2);

		GridBagLayout GBL = new GridBagLayout();
		GridBagConstraints GBC = new GridBagConstraints();
		dane.setLayout(GBL);

		GBC.weightx = 0.5;
		GBC.weighty = 1;
		GBC.fill = GridBagConstraints.BOTH;

		GBC.gridx = 0; // Wiersz komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridy = 0; // Kolumna komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridheight = 1; // Ile zajmuje kolumna (od 1 do ->)
		GBC.gridwidth = 1; // Ile zamuje wierszy (od 1 do ->)
		GBC.insets = new Insets(5, 5, 5, 5); // Odstępy pomiędzy elem. (góra, lewo, dół, prawo)
		// GBC.fill = GridBagConstraints.NONE; // Rodzaj wypełnienia (pion, poziom, całość, nic)
		GBC.anchor = GridBagConstraints.CENTER; // Wyrównanie (wszystkie kierunki świata)

		JLabel etyNazwisko = new JLabel("Nazwisko");
		GBL.setConstraints(etyNazwisko, GBC);
		dane.add(etyNazwisko);

		GBC.gridx = 1; // Wiersz komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridy = 0; // Kolumna komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridheight = 1; // Ile zajmuje kolumna (od 1 do ->)
		GBC.gridwidth = 1; // Ile zamuje wierszy (od 1 do ->)
		// GBC.fill = GridBagConstraints.NONE; // Rodzaj wypełnienia (pion, poziom, całość, nic)
		GBC.anchor = GridBagConstraints.CENTER; // Wyrównanie (wszystkie kierunki świata)

		JButton nazwisko = new JButton("OK");
		GBL.setConstraints(nazwisko, GBC);
		dane.add(nazwisko);

		// GBC.weightx = 0.5;
		// GBC.weighty = 0.5;

		GBC.gridwidth = GridBagConstraints.REMAINDER;

		GBC.gridx = 0; // Wiersz komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridy = 1; // Kolumna komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridheight = 1; // Ile zajmuje kolumna (od 1 do ->)
		GBC.gridwidth = 1; // Ile zamuje wierszy (od 1 do ->)
		// GBC.fill = GridBagConstraints.NONE; // Rodzaj wypełnienia (pion, poziom, całość, nic)
		GBC.anchor = GridBagConstraints.CENTER; // Wyrównanie (wszystkie kierunki świata)

		JLabel etyImie = new JLabel("Imie");
		GBL.setConstraints(etyImie, GBC);
		dane.add(etyImie);

		GBC.gridx = 1; // Wiersz komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridy = 1; // Kolumna komórki w której jest górny lewy róg obiektu (od 0 do ->)
		GBC.gridheight = 1; // Ile zajmuje kolumna (od 1 do ->)
		GBC.gridwidth = 1; // Ile zamuje wierszy (od 1 do ->)
		// GBC.fill = GridBagConstraints.NONE; // Rodzaj wypełnienia (pion, poziom, całość, nic)
		GBC.anchor = GridBagConstraints.CENTER; // Wyrównanie (wszystkie kierunki świata)

		JTextField imie = new JTextField(10);
		GBL.setConstraints(imie, GBC);
		dane.add(imie);
	}
}
GD
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 14 lat
0

1.Według mnie weightx/y określają procent okna jak ma zajmować komponent, a nie odległość między nimi, co ustawia się za pomocą insets.

  1. Spróbuj setFill(None), i ustaw graniczne wielkości panelu.

Pozdrawiam

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.