добавление JLayeredPane к JPanel

Я использовал "Троичный Словарь Дерева поиска в C#" ( http://www.codeproject.com/KB/recipes/tst.aspx ) для поиска подобных строк.

С уважением, Patricio

11
задан asawilliams 19 November 2009 в 15:31
поделиться

2 ответа

Из учебного пособия

По умолчанию многоуровневая панель не имеет диспетчера компоновки. Это означает, что вам обычно приходится писать код, который позиционирует и изменяет размеры компонентов, которые вы помещаете в многоуровневую панель.

См. Изменения в вашем коде:

import java.awt.*;
import javax.swing.*;
public class MyClass extends JPanel {
    private JLayeredPane layeredPane;
    private JLabel imageContainer = new JLabel();
    private JButton info = new JButton("i");

    MyClass(ImageIcon image) {
        super();

        this.imageContainer.setIcon(image);

        this.layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(300, 300));
        layeredPane.add(imageContainer, new Integer(50));
        layeredPane.add(info, new Integer(100));
        this.add(layeredPane);
        // CHANGED CODE
        // Manually set layout the components. 
        imageContainer.setBounds( 0, 0,  
                                  image.getIconWidth(),
                                  image.getIconHeight() ); 
        info.setBounds( 200, 00,  50, 40 );
    }
    public static void main( String [] args ) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.add( new MyClass( new ImageIcon("logo.png")  ) );
        frame.pack();
        frame.setVisible( true );
    }
}       

Дополнительные примечания:

1) Это лучше (в моем мнение) поставить открывающую скобку в ту же строку. Так выглядит большая часть кода Java.

2) Избегайте наследования от JPanel (или любого другого компонента), если вы на самом деле не создаете подкласс. Вы можете использовать его напрямую, без необходимости наследования (если вы действительно не создаете новый компонент.

16
ответ дан 3 December 2019 в 05:58
поделиться

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

4
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: