0

装飾されていない JFrame を作成しようとしています。背景ラベルの上にボタンを配置しようとしています。ただし、ボタンの Z オーダーを設定すると、ボタンが jframe のサイズにストレッチされ、 setBounds() も setSize() も状況を変えません。これが私のコードです:

import javax.swing.*;

public class MyApp {

    public static void main(String[] args) {

        JFrame mainFrame = new JFrame();
        mainFrame.setBounds(0, 112, 100, 50);
        mainFrame.setLayout(null);
        mainFrame.setUndecorated(true);

        JLabel lblBackground = new JLabel(new ImageIcon(JFrame.class.getResource("/res/green.png")));
        lblBackground.setBounds(0, 0, 100, 50);

        JButton btnStart = new JButton("");
        btnStart.setBounds(5, 15, 10, 15);

        mainFrame.add(lblBackground);
        mainFrame.add(btnStart);
        mainFrame.setComponentZOrder(btnStart, 0); 
        mainFrame.setComponentZOrder(btnStart, 1); 


        mainFrame.setVisible(true);

    }   
}  

返信ありがとうございます。

4

2 に答える 2

2

これには JLayeredPane を使用します。

新しい JLayeredPane を作成する必要があります。 JLayeredPane layered = new JLayeredPane();

これをコンテンツ ペインとして使用するように JFrame を設定します。 mainFrame.setContentPane(layered);

そして、次の形式でコンポーネントを追加します。 layered.add(Component c, int layerNumber);

それがうまくいくことを願っています!

JLayeredPanes の詳細

于 2013-08-09T21:19:50.823 に答える
0

null レイアウトで遊んではいけません。Swing は、レイアウト マネージャーで使用するように設計されました。

ラベルにボタンを追加します。例えば:

JLabel label = new JLabel(...);
label.setLayout( new FlowLayout() );
JButton button = new JButton(...);
label.add( button );
frame.add(label);
frame.pack();
frame.setVisible(true);

これで、フレームは画像と同じサイズになるはずです。ボタンは画像の上部中央に配置する必要があります。ボタンを別の場所に配置したい場合は、別のレイアウト マネージャーを使用してください。

于 2013-08-10T02:59:43.793 に答える