Это правильный способ наложения нескольких компонентов на одной панели? - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь наложить пользовательскую прозрачность поверх JPanel.Я хочу, чтобы оба компонента простирались до края многоуровневой панели.Я переопределил метод paintComponent верхнего компонента, чтобы вообще ничего не делать, кроме случаев, когда я хочу отобразить наложение.Затем он рисует соответствующий текст в соответствующем месте.

Вот мое решение проблемы макета:

JLayeredPane jlp = new JLayeredPane();
jlp.setLayout(new OverlayLayout(jlp) {
    @Override
    public void layoutContainer(Container target) {
        for (Component c: target.getComponents())
            c.setBounds(0, 0, target.getWidth(), target.getHeight());
    }
});

Вопрос в том, есть ли лучший способ сделать это без переопределения layoutContainer?Это похоже на хак для меня.Я имею в виду, на самом деле я не могу поверить, что нет возможности сделать это при размещении компонентов.Но если я не переопределю метод, он оставляет пропуски на верхней и левой сторонах.

Я что-то здесь упускаю или это правильный способ справиться с этими требованиями?

1 Ответ

2 голосов
/ 24 ноября 2011

OverlayLayout не был рассчитан на размер всех компонентов, чтобы заполнить все доступное пространство.По сути, вы создали настроенный менеджер макета.В этом подходе нет ничего плохого.

Я не уверен, почему вы используете JLayeredPane.Вы должны иметь возможность просто использовать обычный JPanel с OverlayLayout и несколькими компонентами.

Или, если вы хотите использовать JLayeredPane, то вам, вероятно, не нужен OverlayLayout.Вы можете добавить ComponentListener на многоуровневую панель и изменить размер всех компонентов при создании события с измененным размером.

...