Я пробовал JLayeredPane. Итак, в следующем коде я создал файлы JLayeredPane
и JLabel
. Я добавил метку в многоуровневую панель, которую я добавил в файл JPanel
. Затем эта панель была добавлена в JFrame.
public static void main(String[] args) {
frame = new JFrame("LayeredPane Example");
frame.setPreferredSize(new Dimension(500,500));
layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(400, 400));
JLabel label = new JLabel("Label on LayeredPane");
label.setLocation(200, 200);
System.out.println("Width " + label.getWidth() );
label.setBounds(20, 20, 400, 40);
layeredPane.add(label);
layeredPane.setLayer(label, 10, 1);
frame.setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.add(layeredPane);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
Теперь проблема в том, что если у меня нет оператора label.setBounds(20, 20, 400, 40);
, то метка не появляется на многоуровневой панели. Это вызывает два вопроса:
- Почему
setBounds
так важно? - Вероятно, часть моего ответа на предыдущие вопросы заключалась в том, что метка имела начальную высоту и ширину 0 перед установкой границ, что может быть причиной того, что
setBounds
важен. В этом случае я хочу знать, как определить соответствующие границы для компонента Swing, когда я добавляю его в файлJLayeredPane
. (Если мои границы меньше соответствующего размера компонента, компонент будет скрыт)
Изменить: на первый вопрос был дан более подробный ответ здесь.