[SWING] komponenty znikają przy JLayeredPane

0

Ogólnie to witam, to mój pierwszy post. Javę znam od początku sierpnia, ale z samym programowaniem mam styczność już od ponad 3 lat.

Chciałem w mojej aplikacji zmienić interfejs na nieco elastyczniejszy. Same okno stworzyłem w generatorze NetBeansa (tzn. wyklikałem), ale do dodania poszczególnych okien użyłem kodu.

Problem jest taki: stworzyłem JPanel, który nie korzysta z komponentów, tylko sam rysuje przez Graphics2D i przechwytuje zdarzenia myszy. ustawiłem go jako zakładkę w JTabbedPane, a ten na warstwę DEFAULT_LAYER w JFrame (wcześniej ustawiłem pasek menu i toobar na MODAL_LAYER).

Na warstwę wyżej dałem JInternalFrame z JPanelami, w tym jeden zawiera JApplet, który również jest rysowany przez Graphics2D i sam przechwytuje zdarzenia.

Problem polega na tym, że przy rysowaniu tego, JPanela najniżej, nadrysowuje on JInternalFrame'y i nie są one widoczne, dopiero jak się na nie trafi i naciśnie

link do aplikacji:
http://tizaw.boo.pl/JavaBlock/JavaBlock-beta.jar

Dlaczego komponent z kolorami nie znika? No, może czemu akurat inne znikają, bo o to mi bardziej chodzi:p

kody:
kawałki konstruktora okna:

        JLayeredPane lp = getLayeredPane();
        lp.setLayer(menuBar, JLayeredPane.MODAL_LAYER);
        lp.setLayer(toolBar, JLayeredPane.MODAL_LAYER);

        blockEdit.setContentPane(Manager.blockEdit);
        blockEdit.setVisible(true);
        blockEdit.setBounds(2, 100, 250, 400);
        lp.add(blockEdit, JLayeredPane.MODAL_LAYER);

        lp.add(Manager, JLayeredPane.DEFAULT_LAYER);
        Manager.setBounds(FLOW.getBounds());
        Manager.setOpaque(false);
        lp.moveToBack(Manager);

Drugie pytanie, to czemu Bounds menedżera jest przestawiony w pionie. W metodzie componentResized (głównego JFrame) przypisuję mu boundsa komponentu JPanel, który rozszerza się wraz z oknem:
Manager.setBounds(FLOW.getBounds());

0

Nie wiem jak konkretnie zrobiłeś rysowanie, ale może do rysowania tego JPanela najniżej przeciążyłeś paint i nie wywołujesz pierwotnej super.paint(g) (na końcu) - która rysuje właśnie dzieci komponentu.

0

Dokładnie:D
nie czytałem dokładnie dokumentacji i ręcznie wywoływałem paint(Graphics). Zamieniłem to wszędzie na repaint(), jak każe dokumentacja i działa:D

Jednak chyba z tego zrezygnuję, albo będzie opcjonalne, bo strasznie tnie:
http://tizaw.boo.pl/JavaBlock/JavaBlock-beta2.jar
Szybciej by pewnie było, gdybym użył osobnych JFrame'ów, ale musiałbym jakoś tak zrobić, żeby zawsze były na wierzchu, nie było ich w pasku zadań.

0

Zdecydowanie lepiej na osobnych. Tak jak teraz jest dość oryginalnie.
Albo zamiast okienek takie wysuwane panele z boku.</image>

0

Do tego w wersji beta (właściwie beta jako "drugi" interfejs) chciałem jeszcze dodać przesuwanie tych okienek wraz ze zmianą rozmiaru okna.
Poprzedni interfejs: http://tizaw.boo.pl/JavaBlock/JavaBlock.jar
Chciałem dać Docki, ale sporo te biblioteki zajmowały

Jeszcze pokombinuję

0

Mi się bardziej właśnie ten stary z panelami podoba.

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