[SWING] GroupLayout - problem z wyrównaniem komponentów

0

Witam.

Mam problem z wyrównaniem komponentów typu JPanel stosując GroupLayout.
Screen: http://img501.imageshack.us/img501/5260/screennv6.jpg

Chodzi mi o różnicę w wysokości pomiędzy lewym panelem "Komputery" a prawą grupą paneli: "Informacje" i panelu z przyciskami. Lewy panel jest krótszy o jakieś 2px od prawej grupy. Żeby było bardziej widoczne zaznaczyłem granice tych paneli liniami na screenie Tutaj. Linie czerwona (lewy panel) i zielona (prawa grupa) powinny się pokrywać, jednak tak nie jest.

Kod:

public void createCompListWindow ()
    {
        addCompDialog = new AddCompWindow();
        addCompDialog.createAddCompWindow();

        setSize (400,350);
        setTitle("Lista komputerów");
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
        setIconImage(new ImageIcon(CompListWindow.class.getResource("icons/compListWindowIcon.png")).getImage());

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);

        /*---Panel listy---*/
        JPanel listPanel = new JPanel();
        listPanel.setBorder(new TitledBorder("Komputery:"));

        compJList = new JList(compNamesList);
        JScrollPane compListScroll = new JScrollPane(compJList);

        GroupLayout layoutL = new GroupLayout (listPanel);
        listPanel.setLayout(layoutL);

        layoutL.setAutoCreateGaps(true);

        layoutL.setHorizontalGroup(
                layoutL.createSequentialGroup()
                .addGap(10)
                .addComponent(compListScroll)
                .addGap(10)
                );

        layoutL.setVerticalGroup(
                layoutL.createParallelGroup(GroupLayout.Alignment.CENTER)
                .addComponent(compListScroll)
                .addGap(50)
                );
        /*---Koniec panelu listy---*/

        /*---Panel informacji---*/
        infoPanel = new JPanel ();
        infoPanel.setBorder (new TitledBorder("Informacje"));
        /*---Koniec panelu informacji---*/

        /*---Panel przycisków---*/
        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setBorder(new TitledBorder(""));
        
        GroupLayout layoutB = new GroupLayout(buttonsPanel);
        buttonsPanel.setLayout(layoutB);

        addButton = new JButton (new ImageIcon(CompListWindow.class.getResource("icons/addIcon.png")));
        addButton.setToolTipText("Dodaj komputer");
        addButton.addActionListener(this);

        editButton = new JButton (new ImageIcon(CompListWindow.class.getResource("icons/editIcon.png")));
        editButton.setToolTipText("Edytuj wpis");

        deleteButton = new JButton (new ImageIcon(this.getClass().getResource("icons/cancelIcon.png")));
        deleteButton.setToolTipText("Usuń wpis");

        checkButton = new JButton(new ImageIcon(this.getClass().getResource("icons/checkIcon.png")));
        checkButton.setToolTipText("Sprawdź dostępność");

        defaultButton = new JButton (new ImageIcon(this.getClass().getResource("icons/defaultIcon.png")));
        defaultButton.setToolTipText("Ustaw jako domyslny");

        layoutB.linkSize(SwingConstants.HORIZONTAL, addButton, deleteButton, checkButton, defaultButton);

        layoutB.setHorizontalGroup(
                layoutB.createSequentialGroup()
                .addComponent(addButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(editButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(deleteButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(checkButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(defaultButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
        );

        layoutB.setVerticalGroup(
                layoutB.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(addButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(editButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(deleteButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(checkButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
                .addComponent(defaultButton, GroupLayout.PREFERRED_SIZE, 35, GroupLayout.PREFERRED_SIZE)
        );
        /*---Koniec panelu przycisków---*/

        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.linkSize(SwingConstants.HORIZONTAL, infoPanel, buttonsPanel);

        layout.setHorizontalGroup (
                layout.createSequentialGroup()
                .addComponent(listPanel, GroupLayout.PREFERRED_SIZE, 150, GroupLayout.PREFERRED_SIZE)
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(infoPanel)
                    .addComponent(buttonsPanel)
                )
        );

        layout.setVerticalGroup (
                layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(listPanel, GroupLayout.PREFERRED_SIZE, 300, GroupLayout.PREFERRED_SIZE)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(infoPanel)
                    .addComponent(buttonsPanel)
                )
        );
        pack();
        setVisible(true);
    }

Skąd ta nierówność? Da się ją jakoś wyeliminować? Proszę o sugestie ;)
Pozdrawiam.</image>

0

To jak, ma ktoś pomysł jak to rozwiązać? ;)

0

Sprawdzałeś na innych systemach? Może daj komponent.setHeight(komponent.getHeight() + 2) o ile to zadziała w GroupLayout.

0

Nie mam metody setHeight() na tym panelu - mogłem użyć tylko setSize(int,int) jednak to też nie pomogło - najwyraźniej GroupLayout nie dopuszcza takich zmian.

Na innych systemach będę mógł sprawdzić to dopiero pod koniec tygodnia, jednak moim celem są tylko systemy Windows (2000/XP/Vista) - w innym miejscu programu korzystam z windowsowego L&F, JNI + WinAPI oraz innych metod działających tylko w tym środowisku. Więc poprawne działanie programu na systemach Linux/UNIX niespecjalnie zmieni moją sytuację.

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