Witam,
prosiłbym o wytłumaczenie problemu pokazanego na załączonym .jpg
Dlaczego w dwóch przypadkach jTextField jest inaczej wyświetlone?!
W drugim przykładzie nie ustawiasz menadżera rozkładu, zatem używany jest domyślny (FlowLayout). Metoda add(JComponent,gdzie) raczej nie ma wtedy sensu.
Napisz
panel.add(textField);
Poczytaj w ogóle o layoutach: tutaj na stronce 4programmers śa chyba 4 artykuły - wprowadzą Cię.
dobre pytanie, ja sie tez nigdy nad tym nie zastanawialem, po prostu ustawiam jako glowne okno *.setLayout(null);
I nie wiem czy dobrze mysle czy nie, ale zdaje mi sie ze nulluje sobie caly Layout domyslny i od tej pory *.setLocation(); oraz *.setSize(); pięknie dzialają.
Przykladowo:
JFrame frameDodaj = new JFrame("Magazyn czasopism (0.1v) 'Dodaj wpis'");
frameDodaj.setSize(500, 300);
frameDodaj.setLocationRelativeTo(null);
frameDodaj.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container content = frameDodaj.getContentPane();
content.setLayout(null);
Dzięki za wszystkie odpowiedzi.
Zadałem pytanie przed zagłębieniem się w kwestie Layoutów. Sam problem jest bardzo prosty.
Może komuś się przyda, więc wyjaśnię. (o ile wszystko dobrze zrozumiałem)
Podsumowując. W obu przypadkach nasz panel miał inny Layout.
JPanel panel = new JPanel();
- tworzymy kontener (JPanel) z domyślnym Layoutem. Dla JPanel domyślny Layout to FlowLayout.Center. W przypadku FlowLayout'u komponenty nie są rozciągane, przyjmują preferowany rozmiar (Preferable size) i dlatego otrzymujemy wycentrowane i 'ściśnięte' JTextField.
JPanel panel = new JPanel(new BorderLayout());
- tworzymy kontener (JPanel) z BorderLayout. Dodając coś z parameterem BorderLayout.NORTH lub BorderLayout.SOUTH sprawiamy, że nasz komponent rozciąga się na całą szerokość panelu, odpowiednio na górze lub dole panelu.
(panel.add(textField, BorderLayout.NORTH);) W naszym wypadku panel zajmuje całą ramkę, więc i pole tekstowe zajmuje całą szerokość.