2013-04-12 4 views
0

Я пытаюсь наложить небольшую панель (sub) на большую панель (parent). Размеры sub меньше, чем у родителя.Можно ли наложить JPanel поверх другого?

JPanel sub = new JPanel(); 
JPanel parent = new CustomPanel(); 

Я хотел бы переопределить метод paintComponent родителя нарисовать суб в верхнем левом углу, со смещением 5 пикселей от верхней и левой сторон. Это выглядело бы примерно так:

class CustomPanel extends JPanel() { 

    JPanel sub = null; 

    public CustomPanel(JPanel sub) { 
     this.sub = sub; 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     this.paintComponent(g); 
     // TODO: Here is where I would call something like sub.paint(); 
     // However, I want sub to "start its paint" 5 pixels inside of 
     // parent's dimensions. How do I specify this? 

Можно ли рассказать югу о том, чтобы нарисовать себя в определенном месте? Ужасная идея?

ответ

3

Почему вы не просто setLayout(null) на родительской панели, а затем перед добавлением подпапки к родительскому, установите его положение и размеры с помощью метода setBounds. Таким образом, нет необходимости использовать paintComponent для позиционирования дополнительной панели.

В случае, если вы, родительская панель, должны иметь конкретный макет с другими компонентами, а sub должно накладывать все это, посмотрите на JLayer (Java 7)/JXLayer (Java 6).

Третье решение может использоваться JLayeredPane.

+0

Проблема, заключающаяся в том, что 'parent' также содержит нетривиальную компоновку компонентов. Наложение ('sub') должно опираться на них, но я не думаю, что я могу уйти от их позиционирования вручную. – sdasdadas

+0

см. Обновленный ответ –

+0

добавлено 3-е решение –

Смежные вопросы