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

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()

@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.

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...

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.

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

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ć

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.

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..

0

Dla niektórych skórek działa:

setFrameIcon(null);

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

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