[Java] Pozbycie się ikonki z rogu aplikacji

0

Witam wszystkich. Mam zwykłego JFrame'a i chciałbym się pozbyć ikonki znajdującej się w górnym lewym rogu aplikacji (domyślnie pod Windowsem) jednak bez wywalania całej belki tytułowej okna. Szukałem informacji w sieci, przeglądałem dokumentację i znalazłem sposób, jednak nie jest on dla mnie wystarczająco dobry. Oto on:

setUndecorated(true);
getRootPane().setWindowDecorationStyle( JRootPane.PLAIN_DIALOG );

Problem jest w tym, że taki zabieg powoduje pozbycie się ikonki, ale przy okazji sprawia, że belka tytułowa okna przyjmuje jakiś dziwny look & feel, przez co wygląda zupełnie inaczej, niż normalne okienko systemowe. Próbowałem też ustawić odpowiedni styl przy użyciu tego:

UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName());

ale to nie pomogło. Mógłby ktoś poradzić, jak pozbyć się tej ikonki jednocześnie nie powodując zmiany wyglądu reszty okienka?

0

No to może przyporządkuj aplikacji pustą ikonkę, ale tym samym pozbędziesz się ikonki w pasku zadań, a to w domyślnie beztekstowym hieroglificznym win 7 jest nie do przyjęcia.

Możesz też samemu stworzyć belkę. Tworzysz ToolBar, albo JComponent, głównemu oknu BorderLayout i ten JComponent na samą górę. Potem robisz w nim odpowiednie MouseListenery do przesuwania okna (setBounds dla głównego okna)

0
Razi91 napisał(a)

No to może przyporządkuj aplikacji pustą ikonkę, ale tym samym pozbędziesz się ikonki w pasku zadań, a to w domyślnie beztekstowym hieroglificznym win 7 jest nie do przyjęcia.

Próbowałem, ale wtedy okno dostaje domyślną ikonkę (taką filiżankę javową). No i poza tym przy, tak jak powiedziałeś, stracę ikonki w innych miejscach. A mi zależy tylko i wyłącznie na pozbyciu się tej ikonki z rogu okna.

Razi91 napisał(a)

Możesz też samemu stworzyć belkę. Tworzysz ToolBar, albo JComponent, głównemu oknu BorderLayout i ten JComponent na samą górę. Potem robisz w nim odpowiednie MouseListenery do przesuwania okna (setBounds dla głównego okna)

Rozważałem taką opcję, ale wydaje mi się, że wtedy musiałbym też samemu oprogramować wygląd belki w zależności od systemu operacyjnego. A z tym byłoby dużo niepotrzebnej roboty.

0

Nigdzie nie jest napisane, że aplikacja musi mieć systemową belkę:p Jest wiele programów posiadających własne style i nieposiadające systemowyh belek i nieraz wyglądają nawet ładniej.
W moim programie używam domyślnie stylu Nimbus i się zastanawiam, czy systemowe dekoracje są potrzebne, bo na windowsie z aero wygląda brzydko - tzn strasznie gruba ramka, do tego przeźroczysta z grubą belką, a same okno całkiem inny styl i bez przeźroczystości.

0

Okej, ale to nie ja decyduję, czy okienko ma mieć belkę, czy nie. Nie ma tak łatwo :)

0

Chodzi Ci o taki wygląd belki?
Belka.jpeg

0

Tak.

0

To może tak

        setVisible(true);
        BufferedImage image=new Robot().createScreenCapture(new Rectangle(getX()+24,getY()+8,16,16));
        setIconImage(image);
0

Ciekawy pomysł, ale ma jedną wadę - zmienia mi tez ikonkę na pasku zadań. A na to niestety nie mogę sobie pozwolić. Swoją drogą to można zrobić też tak:

Image icon = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB_PRE);
0

A znasz program, który wyświetla inną ikonę na belce, inną na pasku zadań?

0

Nie kojarzę, ale znam program, który wyświetla ikonkę na pasku zadań, a nie wyświetla jej na belce.

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