JInternalFrame - jak usunąć z title panelu przycisk

JInternalFrame - jak usunąć z title panelu przycisk
0

Jak usunąć przycisk z title panelu, szukałem w dokumentacji JInternalFrame i nie potrafię tego zrobić. Lub chociaż jak nazywa sie ten przycisk lub jego ikona. Przesyłam obrazek na którym jest tylko ten jeden przycisk na panelu u góry po lewej. user image

airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
0

Z tego co widzę korzystasz z Nimbusa, czyli L&F rozszerzającego Synth'a. Poniższa metoda prawdopodobnie nie jest idealna, ale dla mnie była najprostszą i najszybszą jaką udało mi się swego czasy wymyślić. Rozszerzasz klasę JInternalFrame i nadpisujesz w niej metodę updateUI()

Kopiuj
@Override
public void updateUI() {
    super.updateUI();
    if (getUI() instanceof SynthInternalFrameUI) {
        ((SynthInternalFrameUI) getUI()).setNorthPane(null);
    }
}

Możliwe, że można tego if'a wywołać gdzieś jednorazowo tylko, ale u mnie w kodzie sporo rzeczy z podmianą UI się działo, dlatego w ten sposób.

0

Dzięki za odpowiedź, lecz nie to mnie interesuje, Twoje rozwiązanie tyczy się usunięcia całego górnego panelu. Mi chodzi żeby on został, bo będę tam miał przycisk zamknięcia, nie chcę tylko tego przycisku po lewej.

Antoniossss
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 10 lat
0

nie jestem w temacie, ale skoro można się dostać do tego górnego panelu (zakładam że będzie jakiś getNorthPanel()) to zapewne można na nim wywołać removeAll lub coś pochodnego...


www.toptraker.pl
TopTraker! - I wiesz co jest grane!
Mój własny projekt w Javie - najnowsza wersja już jest!
airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
0

Widzę, że trochę się pomyliłem. Nie potrzebujemy Synth'a, wystarczy nam BasicInternalFrameUI czyli w zasadzie każdy L&F Javowy. Ponieważ setNorthPane() przyjmuje jako argument dowolny komponent dziedziczący po JComponent możesz tam ustawić co tylko Ci się podoba (np. panel z jednym swoim przyciskiem)

0

Też przeczytałem że tak to powinno być rozwiązane, tylko nie za bardzo wiem jak to obrać w kod. Mógłbyś dać jakiś skrawek kodu lub jakoś nakierować? a jeśli nie to najwyżej pozostawię ten temat, bo juz nie mam na niego siły.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Trochę sztuczkowe rozwiązanie. Wycinamy z paska fragment leżący obok ikony i mający taki sam rozmiar. Zapisujemy, np . jako Empty.gif. W kodzie

Kopiuj
setFrameIcon(new ImageIcon("Empty.gif"));

Pasek nieaktywny ma trochę inny odcień niż aktywny, więc po pierwszym wyświetleniu okna, i po każdym programowym przesunięciu na wierzch (metoda toFront()) trzeba wywołać

Kopiuj
setSelected(true);

Lepiej chyba podpiąć do każdego JInternalFrame InternalFrameListenera, a setSelected(true) wywoływać w internalFrameActivated i internalFrameOpened.
Prawdopodobnie trzeba uzależniać "pustą" ikonę od SO. Sprawdziłem przed chwilą na XP, działa znakomicie.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
0

Dzięki za odpowiedź, ale jeśli zmienię tło przycisku to jego funkcjonalność zostanie, czyli nadal będzie rozwijane menu tego przycisku.

0

Witam, mam podobny problem, ma ktoś jakiś skrawek kodu który by usunął ten przycisk. Bo kolega wyżej opisał nadpisanie tła, ale jak grzes123 napisal to nie wyklucza jego funkcjonalności, prosze o pomoc..

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Dla niektórych skórek działa:

Kopiuj
setFrameIcon(null);

Dla Nimbusa nie działa, po setDefaultLookAndFeelDecorated(true) działa. Dla innych skórek nie sprawdzałem.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.