0

JLabel を追加しようとしていますが、問題は jframe の中央または左側にスタックしていることです。

これが私のコードです。

public class test extends JFrame{

    public test(){
        JLabel text = new JLabel("test")
        text.setLocation(100,100);
        setTitle("Help me");
        setSize(500,500);
        add(text);

    }
}

public class Runner{
    public static void main (String[] args){
         test a = new test();
    }
}
4

2 に答える 2

1

すべてのコンテナーには、独自の規則に従って含まれる要素の位置とサイズを設定するレイアウト マネージャーがあります。JFrameデフォルトのレイアウトはBorderLayoutで、デフォルトで左側に配置されます。

コンポーネントを絶対に配置するには、コンポーネントを追加/削除/変更するたびにレイアウトマネージャーを設定してnull明示的に呼び出す必要があります。コンポーネントの位置だけでなく、コンポーネントのサイズも設定する必要があります (たとえば、1 回の呼び出しですべてを設定するために使用します。repaint()JFramesetBounds

例として、次のコードはあなたが望むことをします:

public class Test extends JFrame {
    public Test() {

            // remove any layout manager.
        setLayout(null);

        setTitle("Help me");
        setSize(500, 500);

        JLabel text = new JLabel("test");
            // set size and position of component.
        text.setBounds(new Rectangle(100, 100, 200, 200));
            // add component.
        add(text);

            // explicitely call repaint().
        repaint();

    }


    public static void main(String[] args) {
        new Test().setVisible(true);
    }
}

詳細については、レイアウト マネージャーを使用しない場合の Oracle チュートリアルを参照してください。

編集:すべてを完全に配置するのは通常面倒なので、通常のレイアウトマネージャーを使用して目的を達成することをお勧めします。

于 2013-10-25T17:01:06.053 に答える