[Swing] Jak wyłączyć rysowanie komponentu?

0

Mam ładnie rozmieszczony layout i chciałbym po pewnej akcji uzytkownika ukryć jeden z komponentów. Próbowałem
component.setVisible(false);
ale wtedy layout się rozwala. Ja szukam czegoś innego. Chciałbym, żeby layout zachowywał się tak, jakby mój komponent cały czas był na formie, ale żeby komponentu nie było widać. Jak to zrealizować?

0

Umieść komponent w dodatkowym kontenerze (JPanel) i chowaj komponent, a layout ustawiaj pod kontener.
Jeszcze inaczej, zakładam, że już próbowałeś, po schowaniu komponentu wywołaj pack() na oknie.

0

Musiałem ukrywać JLabela, więc zrealizowałem to pisząc własną klasę. Może komuś się przyda:

private class WarningLabel extends JLabel
    {
        public WarningLabel(String text)
        {
            super(text);
        }

        @Override
        public void paint(Graphics g)
        {
            super.paint(g);
            if (showWarning) return;

            g.setColor(getBackground());
            g.fillRect(0, 0, getWidth(), getHeight());
        }

        public void showWarning(String warning)
        {
            showWarning = true;
            repaint();
            
            setToolTipText(warning.isEmpty() ? null : warning);
        }

        public void hideWarning()
        {
            showWarning = false;
            repaint();

            setToolTipText(null);
        }

        private boolean showWarning;
    }

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