0

このコードは、画像の上にボタンが配置されたフレームを出力します。ステートメントを から に変更するfr.setContentPane( new JPanel...fr.add(new JPanel...、サイズが のボタンしか表示されません700,700。違いはなんですか ?

public class Tester {

    public static void main(String args[]) {
        try {
            JFrame fr = new JFrame();
            fr.setContentPane(new JPanel() {
            BufferedImage image = ImageIO.read(new File("C:\\Users\\user\\Documents\\NetBeansProjects\\JavaApplication1\\src\\javaapplication1\\meaning.JPG"));
                @Override
                public void paintComponent(Graphics g) {
                   super.paintComponent(g);
                   g.drawImage(image, 0,0,700,700, this);

                 }
            });
            fr.add(new JButton("Press Me"));
            fr.setSize(700,700);
            fr.setVisible(true);
            fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fr.setResizable(false);
        }catch(Exception exc) {
            exc.printStackTrace();
        }
    }        
}
4

1 に答える 1

4

JFrame#add基本的に を呼び出すJFrame#getContentPane().addので、省略形です。

だからあなたのコードは実際に言っています...

fr.setContentPane(new JPanel() {...});
fr.getContentPane().add(new JButton("Press Me"));

setContentPaneここで、行をコメント アウトすると、デフォルトでJFramea が使用BorderLayoutされ、ボタンはCENTER(フレームのデフォルト) コンテンツ ペインの位置に配置され、使用可能なスペース全体を埋めます。

呼び出すことで、元のコードと同じ効果を得ることができます...

JPanel background = new JPanel() {...};
background.add(new JButton("Press Me"));
fr.add(background);

詳細については、最上位コンテナーの使用とルート ペインの使用方法を参照してください。

于 2013-09-05T05:05:24.697 に答える