2011-11-23 8 views
2

Я пытаюсь наложить пользовательскую прозрачность поверх 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? Мне это кажется взломанным. Я имею в виду, действительно, я не могу поверить, что нет возможности сделать это при компоновке компонентов. Но если я не переопределяю метод, он оставляет зазоры на верхней и левой сторонах.

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

ответ

2

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

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

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