GroupLayout, nie widać komponentów :(

Odpowiedz Nowy wątek
2011-09-18 21:13
0

Witajcie,
dopiero zaczynam przygodę z Javą i mam problem z którym od kilku godzin nie mogę sobie poradzić, szukałem w necie próbowałem z innym layoutem ale tam też nie wychodziło więc wziąłem kolejny.
Nie wyświetla mi wogle komponentów w ramce. Pewnie to trywialny błąd ale strasznie mi przeszkadza bo zatrzymalem się na warstwie widoku i jak grochem o sciane.

public class DelayMainFrame extends JFrame{

    private JPanel mainPanel;

    public DelayMainFrame() {  //constructor

        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenDimension = kit.getScreenSize();
        setSize(screenDimension.width/2, screenDimension.height/2);
        setLocationByPlatform(true);
        //LayoutManager2 manager = new BasicSplitPaneUI.BasicVerticalLayoutManager();

        //Components creation

        JTextField signalNameTextField = new JTextField("<Put the signal name here>",20);
        JLabel signalNameTextFieldLabel = new JLabel("Signal name", SwingConstants.RIGHT);

        JTextField blockNameTextField = new JTextField("<Put the block name here>",20);
        JLabel blockNameTextFieldLabel = new JLabel("Block name", SwingConstants.RIGHT);

        JComboBox iaComboBox = new JComboBox();
        iaComboBox.setEditable(true);
        iaComboBox.addItem("IS");
        iaComboBox.addItem("IA");

        //adding components to the panel
        mainPanel = new JPanel();
        GroupLayout layout = new GroupLayout(mainPanel);
        mainPanel.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(LEADING)   //s1
                    .addComponent(signalNameTextFieldLabel)     //p1
                    .addComponent(blockNameTextFieldLabel))     //p2
                .addGroup(layout.createParallelGroup(LEADING)          //s2
                    .addComponent(signalNameTextField)                 //p1
                    .addComponent(blockNameTextField))                 //p2
                .addComponent(iaComboBox)
                            );

        //layout.linkSize(SwingConstants.HORIZONTAL);

        layout.setVerticalGroup(layout.createSequentialGroup()
                      .addGroup(layout.createParallelGroup(BASELINE)
                           .addComponent(signalNameTextFieldLabel)
                           .addComponent(signalNameTextField)
                      )
                      .addGroup(layout.createParallelGroup(BASELINE)
                           .addComponent(signalNameTextFieldLabel)
                           .addComponent(signalNameTextField)
                           .addComponent(iaComboBox)
                      )) ;    

        setTitle("Signal delay tool by DRZ");
        //pack();

        try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
        SwingUtilities.updateComponentTreeUI(DelayMainFrame.this);
        }

        catch (Exception e)
        {
            e.printStackTrace();
        }

    }  // end constructor

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //System.out.println("Hello World!");
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                DelayMainFrame myFrame = new DelayMainFrame();
                myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                myFrame.setVisible(true);
            }
        });
    }

}

Chodzi mi o to żeby był taki układ na tą chwilę (potem dodam więcej ale na razie nawet to nie wychodzi):

Signal name (label) | [put the signal name here] (text field)
Block name (label) | [put...] | IS/IA combo box

Proszę o pomoc bo ugrzązłem, próbowałem layout zmieniać ale nie chcę znów tego robić bo ten wygląda na w miarę uniwersalny.
Pozdrówki

edytowany 1x, ostatnio: madmike, 2011-09-18 21:18

Pozostało 580 znaków

2011-09-18 21:28
bo
0

Dodajesz komponenty do mainPanel, ale samego mainPanel nie wyświetlasz.

dzięki za szybką odpowiedź. ALe jak mam wyświetlać? myślałem że mam zrobić tylko setVisible(true) na rzecz myFrame.. nie wiem za bardzo jak mogę go wyświetlić - drzinks 2011-09-18 21:57
wziąłem mainPanel.setVisible(true); ale nic to nie zmienia. W poprzednim layoucie jakim brałem Grid coś tam wyświetlał bez problemu tylko nie tak jak chciałem.. - drzinks 2011-09-18 22:02

Pozostało 580 znaków

2011-09-19 10:13
0

mógłby mnie ktoś oświecić jak mam ten panel wyświetlić? ( w tym wcześniejszym gridlayout nie musiałem tego robić i było widać panel)
Pomóżcie plis bo na prawde nie mam pomysła już, a siedzieć nad 1 rzeczą jakiś czas powoduje że nic się już nie wymyśli od pewnego momentu..

Pozostało 580 znaków

2011-09-19 10:32
bo

Gdzieś w konstruktorze (po utworzeniu mainPanel)

add(mainPanel);

Pozostało 580 znaków

2011-09-19 10:52
0

ok, jak przyjdę z roboty to przetestuję. Dzięki !

Pozostało 580 znaków

2011-09-19 19:04
0

Super, poszło, działa, dzięki wielkieee jak nie wiem co !
ps tylko zastanawia mnie fakt czemu nie musiałem dodawać mainPanel przy GridBagLayout bo działało..

Pozostało 580 znaków

2011-09-19 23:39
bo
0

Inne menadżery (np. GridBagLayout) nie wymagają podania kontenera (panelu) jako argumentu konstruktora. Zatem zapewne nie tworzyłeś obiektu mainPanel, a komponenty dodawałeś wprost do głównego okna.

Pozostało 580 znaków

2011-09-20 12:13
0

Takimi rzeczami się nie przejmujesz jeśli korzystasz z GUI Builder'a, ale wszystko ma swoje wady i zalety.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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