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);
、ラベルがレイヤードペインに表示されないことです。これは2つの質問を提起します:
- なぜ
setBounds
そんなに重要なのですか? - おそらく以前の質問の回答の一部でしたが、境界を設定する前のラベルの初期の高さと幅は0
setBounds
でした。これが、重要な理由である可能性があります。その場合、Swingコンポーネントをに追加するときに、Swingコンポーネントの適切な境界をどのように決定できるかを知りたいですJLayeredPane
。(境界がコンポーネントの適切なサイズよりも小さい場合、コンポーネントは非表示になります)
編集:最初の質問は、ここでより詳細に以前に回答されました。