Zmiana ukladu w JPanel

0

Witam

Posiadam JTabbedPane w ktorym mam kilka zakladek. Do dodawania komponentow do JPaneli uzywam GridBagLayout. Co zrobic, zeby rozmieszczanie elementow zaczynalo sie od lewego gornego rogu a nie skupialo sie na srodku? Innymi slowy, jak przyciagnac caly gotowy uklad GridBagLayout do lewego gornego rogu?

0

Nikt nie wie?

0

A czytałeś to? http://download.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
Pierwsza rzecz, jaką tam można wyczytać to żeby unikać używania tego managera, bo został zaprojektowany dla narzędzi graficznych. W dalszej części jest jednak opisane jak go użyć, więc może tam znajdziesz odpowiedź. Ja pamiętam, że kiedyś próbowałem go zastosować, ale tego co potrzebowałem nie umiałem nim zrobić i skończyło się, że napisałem własny manager.

0

próbowałeś ustawić coś takiego:

GridBagConstraints gb = new GridBagConstraints();
gb.anchor = GridBagConstraints.NORTHWEST;

?

0

Tak i wiele innych opcji. Ale nie jestem w stanie zmusic JPanel, zeby rysowal elementy w prawym gornym rogu. Zawsze jest to srodek. Nawet by wystarczylo, zeby rysowal od samej gory a nie od srodka.

Chodnik: czytalem to i rozne poradniki. Nigdzie nie znalazlem odpowiedzi, dlatego napisalem tutaj. Chyba tez pomysle nad wlasnym managerem.

0

Wklej kod. Taki, żeby można było uruchomić i zobaczyć co nie działa.

0

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);
    }
}
0

A nie możesz po prostu użyć dowolnego narzędzia graficznego, żeby utworzyć potrzebne Ci GUI? Jako próbki w różnych rozmiarach wystarczy użyć JPanel z różnymi ramkami i ich kolorami oraz sztywnymi bądź nie sztywnymi rozmiarami. Można użyć np. Matisse, który jest wbudowany w Netbeans. Jak raz stworzysz to o co Ci chodzi, to wygenerowany kod przekleisz do dowolnego projektu (w dowolnym IDE), a w miejsce sampli JPanel wrzucisz rzeczywiste komponenty, które chcesz użyć. Kodem klejącym (layout managerem) nie warto się w ogóle zajmować bo to czysta strata czasu. To co obecnie jest dostępne daleko przewyższa rzeczywiste potrzeby w dowolnym systemie.

0

Zgadzam sie, ale tez chcialem umiec zrobic to wlasnorecznie. Tworzenie GUI w NetBeans jest banalne.

0
chodnik napisał(a)

Wklej kod. Taki, żeby można było uruchomić i zobaczyć co nie działa.

Żeby nie było, że chciałem kod a nie popatrzyłem. No więc uruchomiłem, pokombinowałem i się poddaję :( . Nie działa to tak od razu jak mi się wydawało. głupi ten manager. Użyj innego albo zrób swój, taka moja rada :)

0
class Panel extends JPanel{

    public Panel(){

        setLayout(new GridBagLayout());

        GridBagConstraints constr = new GridBagConstraints();

        constr = new GridBagConstraints();
        constr.fill = GridBagConstraints.NONE;
        constr.anchor = GridBagConstraints.NORTHWEST; //!
        constr.weightx = 1; //!
        constr.weighty = 1; //!
        constr.insets.set(10, 10, 10, 10);


        JTextField textField = new JTextField(4);
        textField.setText("tralala");

        add(textField, constr);
    }
}

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