JPanel w JScrollPane

0

Witam!
Napotkałem problem przy tworzeniu GUI programu, z którym nie potrafię sobie poradzić a wygląda on tak:
Buduję GUI w sposób następujący: Najpierw tworzę komponent o nazwie panelGlowny:

JPanel panelGlowny

Następnie ustawiam:

setContentPane(getPanelGlowny())

Ponieważ program ma kilka opcji w menu w zależności od wybranej ukazuję się inny panel, który wrzucam na ten panelGlowny:

panelGlowny.add(komponent);

a poprzedni komponent traktując metodą:

setVisible(false);

Wszystko to działa poprawnie a problem mam gdy chcę dodać w taki sposób panel w suwaku gdyż jest za duży. GUI podzieliłem w ten sposób, że każdy taki komponent zwraca odpowiadająca za to metoda. Dziwi mnie, że działa to co chcę zrobić jeśli suwak zwracam np w JTabbedPane a nie w JPanel i tak to działa:

    private JTabbedPane getCos(){
        cos = new JTabbedPane();
        cos.setLocation(0,0);
        cos.setSize(993, 678);
        cos.addTab("cos", getCos1());
        return cos;
    }
    
    private JScrollPane getCos1(){
        cos1 = new JPanel();
        cos1.setPreferredSize(new Dimension(970, 1150));
        cos1.setLayout(null);
        cos1.setBackground(Color.red);
        suwakAM = new JScrollPane(cos1);
        suwakAM.getVerticalScrollBar().setUnitIncrement(20);
        return suwakAM;
    }

a nie działa to:

    private JPanel getCos(){
        cos = new JPanel();
        cos.setLayout(null);
        cos.setLocation(0,0);
        cos.setSize(993, 678);
        cos.add(getCos1());
        return cos;
    }

    private JScrollPane getCos1(){
        cos1 = new JPanel();
        cos1.setPreferredSize(new Dimension(970, 1150));
        cos1.setLayout(null);
        cos1.setBackground(Color.red);
        suwakAM = new JScrollPane(cos1);
        suwakAM.getVerticalScrollBar().setUnitIncrement(20);
        return suwakAM;
    }

oba sposoby dodaj jak pisałem tak:

komponent = getCos();
panelGlowny.add(komponent);

Mówiąc nie działa mam na myśli panel jest wyświetlany ale bez suwaka?
Dlaczego?
Może dlatego, że wszystko robię bez Layoutu, ustawiam:

setLayout(null);

a potem wszystko ustawiam jak chcę poprzez setSize() i setLocation.
Ale nie rozumiem tego nie działa coś co według mnie jest intuicyjne skoro działa prze JTabbedPane.

Jeśli ktoś dotarł aż tu do końca mojego wywodu to dzięki i liczę na pomoc.

0

Może po prostu to co masz na ekranie mieści się w pełni i paski nie są potrzebne, bo właśnie mają one to do siebie że jak wszystko się mieści to paski są automatycznie usuwane :p.

0

Nie jak widzisz rozmiary w obu przykładach ustawione są tak samo. Jeden działa a drugi nie. Ktoś rozumie dlaczego?

0

Notka na temat metody Component#Add

Note: If a component has been added to a container that has been displayed, validate must be called on that container to display the new component. If multiple components are being added, you can improve efficiency by calling validate only once, after all the components have been added.

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