Okno ma rozmiar 1000x1000. Uzywajac GridBagLayout, pole tekstowe jest rysowane na samym srodku. Jesli bedzie wiele komponentow, tez beda zgrupowane na srodku. Chodzi o to, zeby mozna bylo wybrac, czy maja byc rysowane od gory, od ktoregos rogu itd. Czy w ogole jest taka mozliwosc?
Jesli aplikacja sklada sie z jednego panelu, to nie ma problemu, bo pack() dostosuje wielkosc okna tak, zeby nie bylo olbrzymich pustych przestrzeni. Ale kiedy w uzyciu jest JTabbedPane, to wielkosc okna bedzie dostosowana, do najwiekszego panelu. Wszystkie mniejsze wygladaja przez to zalosnie bo sa rysowane centralnie w srodku.
Generalnie moge uzyskac wymagany efekt, wsadzajac panel do panelu ze standardowym layoutem albo z BoarderLayout'em. Ale po prostu nie chce mi sie wierzyc, ze tego samego nie da sie uzyskac w GridBagLayout.
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class GridBagTest extends JFrame{
public static void main(String[] args){
GridBagTest okno = new GridBagTest();
okno.setVisible(true);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public GridBagTest(){
JTabbedPane jtp = new JTabbedPane();
jtp.add("TEST", new Panel());
getContentPane().add(jtp);
setPreferredSize(new Dimension(1000,1000));
pack();
}
}
class Panel extends JPanel{
public Panel(){
setLayout(new GridBagLayout());
GridBagConstraints constr = new GridBagConstraints();
constr = new GridBagConstraints();
constr.fill = GridBagConstraints.NONE;
constr.anchor = GridBagConstraints.PAGE_START;
constr.weightx = 0;
constr.weighty = 0;
constr.insets.set(10, 10, 10, 10);
JTextField textField = new JTextField(4);
textField.setText("tralala");
add(textField, constr);
}
}