0

クラス1

public class mainclass extends JFrame{
    public static void main(String[] args){
        JFrame jf = new mainclass();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        jf.setSize(new Dimension(720, 480));
        jf.getContentPane().setLayout(null);
    }
    public mainclass(){
        components c = new components();
        Box b = new Box(BoxLayout.Y_AXIS);
        for(int i = 0; i < c.size(); i++){
            System.out.println(c.get(i).getWidth());
            b.add(c.get(i));
        }
        getContentPane().add(b);
    }
}

クラス2

public class components extends ArrayList<Component>{
    public components(){
        JButton b = new JButton("Quit");
        b.setBounds(10, 10, 200, 200);
        b.setVisible(true);
        this.add(b);
    }
}

JButton は、レイアウトなしで JFrame に追加されるボックスに追加する必要があります。ボタンが表示されないのはなぜですか?

4

1 に答える 1

1

ヌル レイアウトと絶対配置を使用して、足元を撃っています。

  • JFrame に null レイアウトを指定します
  • 次に、サイズや位置 (ボックス) を指定せずにコンポーネントを追加すると、サイズ (0, 0) になります。
  • 代わりに、null レイアウトの使用を避ける
  • バランスの取れた GUI を簡単に作成するのに役立つレイアウト マネージャーについて学び、使用してください。

あなたが達成しようとしている構造を説明する方が良いと思います。また、ArrayList などのコレクションを拡張するクラスを作成することも避けます。代わりに、この例では継承ではなく構成によって拡張する方がはるかに優れています。

于 2013-10-12T21:06:43.940 に答える