Jak działa getContentPane()?

0

Witam.
Ostatnio zacząłem się bawić trochę w pisanie gui w javie i mam kilka pytań jak co działa. Zrobiłem sobie klasę testową i robię coś takiego:

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;


public class Tests extends JFrame{
	
	public Container container;
	
	public Tests(){
		container = getContentPane();
		container.setVisible(true);
		container.setSize(200, 300);
		
//		setVisible(true);
//		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//		setSize(200, 200);

	}

	public static void main(String[] args){
		SwingUtilities.invokeLater(new Runnable(){
			
			@Override
			public void run(){
				new Tests();
				
			}
		});

	}

}

Czemu nie za komentowany kod w konstruktorze nie chce mi działać? A ten za komentowany działa?

Mam jeszcze jedno pytanko czemu jak napiszę sobie coś takiego:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

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


public class Tests extends JFrame{
	
	JPanel one, two, three;
	
	public Tests(){

		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new GridLayout(3,1));
		one = new JPanel();
		two = new JPanel();
		three = new JPanel();
		one.setPreferredSize(new Dimension(100, 100));
		two.setPreferredSize(new Dimension(100, 200));
		three.setPreferredSize(new Dimension(100, 300));
		one.setBackground(Color.BLACK);
		two.setBackground(Color.RED);
		three.setBackground(Color.GREEN);
		add(one);
		add(two);
		add(three);
		pack();
	}

	public static void main(String[] args){
		SwingUtilities.invokeLater(new Runnable(){
			
			@Override
			public void run(){
				new Tests();
				
			}
		});

	}

}

Czemu moje komponenty nie są takiego rozmiaru jak chcę?

0

Pytanie 1, nie używaj getContentPane() ;).
Pytanie 2, w GridLayout wszystkie komponenty maja taki sam rozmiar.

0
  1. No okey ale fajnie by było zrozumieć czemu się tak dzieje.
  2. To jak uzyskać podobny efekt? Chodzi mi o ogół bo w tym przypadku elementy są wyświetlane w pionie ale jak by chcieć np. 2 kolumny 3 wiersze? :)
0
  1. Co tu jest do rozumienia? Brakuje polecenia by wyświetlić okno (JFrame), zatem ono nie jest wyświetlane.
  2. GridLayout(3,2)? Rozmieszczenie komponentów wymaga trochę pomysłowości, możesz mieć jakiegoś menadżera dla całego okna, a w oknie panele z innymi menadżerami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1