Dzięki za kody. Testowałem i niestety nadają się ale nie do tego co chciałem osiągnąć. Nie mogłem zrobic tak by po usunięciu frame z automatu zmieniał się rozmiar. Więc zrobiłem oszukaństwo i sam po usunięciu panelu zmieniałem rozmiar frame'a (bylo to prawdopodobnie spowodowane tym że każdy z moich komponentów ma ustawiony setPreferedSize).
Po usuwaniu panelu znowu pojawiał się problem z dodawaniem panelu - panel ten był raczej skomplikowany - zawierał iles podpaneli, tabel etc. Musiałem usuwać wszystko idac w dół drzewa i znowu dodawać od dołu do góry - efekt był mizerny i do tego trudny w utrzymaniu.
Wiec zrobiłem po prostu zmniejszanie panelu do wysokości 0 i potem znowu go rozszerzanie. Zachowuje lajołty i ustawienie komponentów etc:
if (!widocznoscRaportu) {
raportPanel.setPreferredSize(new Dimension(1000, rozmiarPaneluRaportowania));
mainPanel.setSize((int) mainPanel.getSize().getWidth(), (int) mainPanel.getSize().getHeight() + rozmiarPaneluRaportowania);
mainPanel.validate();
mainPanel.repaint();
mainFrame.setBounds(mainFrame.getBounds().x, mainFrame.getBounds().y, (int) mainFrame.getSize().getWidth(), (int) mainFrame.getSize().getHeight() + rozmiarPaneluRaportowania);
mainFrame.validate();
mainFrame.repaint();
widocznoscRaportu = true;
} else {
raportPanel.setPreferredSize(new Dimension(1000, 0));
mainPanel.setSize((int) mainPanel.getSize().getWidth(), (int) mainPanel.getSize().getHeight() - rozmiarPaneluRaportowania);
mainPanel.validate();
mainPanel.repaint();
mainFrame.setBounds(mainFrame.getBounds().x, mainFrame.getBounds().y, (int) mainFrame.getSize().getWidth(), (int) mainFrame.getSize().getHeight() - rozmiarPaneluRaportowania);
mainFrame.validate();
mainFrame.repaint();
widocznoscRaportu = false;
}
Działać działa:)
Niech mi ktos wytłumaczy czym się różni preferedsize od size - bo według mojej wiedzy pierwsze znaczyło że moze a nie musi - w zależnosci od rozmiaru komponentu wyzej w drzewie...a drugi to na twardo.
A teraz dodatek : robił ktoś może wysuwanie sie panelu płynnie? Wysuwa się i chowa ale nie od razu tylko jakoś liniowo albo i nawet nieliniowo (na początku szybko a potem wolniej).
Jeszcze sie za to nie zabralem ale wywoływanie repaint() i zmienianie size troche wydaje mi się kulwawe...