0
import javax.swing.*;
import java.awt.*;
public class gui {
    JFrame f;
    JLabel fname,fsex,age;
    JTextField t1;
    JTextField t2;
    JTextField t3;
     gui(){
        frame();
    }

    private void frame() {
        // TODO Auto-generated method stub
        f = new JFrame();
        f.setVisible(true);
        f.setSize(500,500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fname = new JLabel("First Name");
        fname.setSize(100,100);
        fsex = new JLabel("Sex");
        fsex.setSize(100,100);
        age = new JLabel("Age");
        age.setSize(100,100);
        t1 = new JTextField();
        t1.setSize(100,100);
        t2 = new JTextField();
        t2.setSize(100,100);
        t3 = new JTextField();
        t3.setSize(100,100);
        JPanel panel = new JPanel();
        panel.setSize(100,100);
        panel.add(fname);
        panel.add(t1);
        panel.add(fsex);
        panel.add(t2);
        panel.add(fname);
        panel.add(age);
        panel.add(t3);
        f.add(panel);


    }
}

なぜこのような表示が得られるのか、その理由がわかれば、コード化された順序ではなく、画面の上部中央にサイズのない小さな線状のウィジェットが表示されるのではないかと思っていました。サイズを設定したら、適切な形状のウィジェットを取得することは想定されていません。また、ウィジェットは非表示ではなく、表示されていますが順序付けられていません。

4

4 に答える 4

3

サイズを設定したら、適切な形状のウィジェットを取得することは想定されていません。

いいえ、サイズを設定することは想定されていません。それはレイアウト マネージャーの仕事です。パネルは、すべてのコンポーネントを適切なサイズで水平に表示する FlowLayout を使用します。

JLabel は、ラベルに割り当てたテキストに基づいて適切なサイズを持ちます。

テキスト フィールドの場合、表示する文字数を指定して、おおよそのサイズを示す必要があります。これを行うには、次を使用します。

JTextField textField = new JTextField(10);

例とより構造化されたプログラムについては、フローレイアウトの使用方法に関する Swing チュートリアルを読むことから始めます。つまり、イベント ディスパッチ スレッドでコードを実行する必要があります。

于 2013-06-15T19:37:44.867 に答える
1

setVisible(true)最後に電話する必要があります。

private void frame() {
        // TODO Auto-generated method stub
        f = new JFrame();
        f.setSize(500,500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fname = new JLabel("First Name");
        fname.setSize(100,100);
        fsex = new JLabel("Sex");
        fsex.setSize(100,100);
        age = new JLabel("Age");
        age.setSize(100,100);
        t1 = new JTextField();
        t1.setSize(100,100);
        t2 = new JTextField();
        t2.setSize(100,100);
        t3 = new JTextField();
        t3.setSize(100,100);
        JPanel panel = new JPanel();
        panel.setSize(100,100);
        panel.add(fname);
        panel.add(t1);
        panel.add(fsex);
        panel.add(t2);
        panel.add(fname);
        panel.add(age);
        panel.add(t3);
        f.add(panel);
        f.setVisible(true); //here set visible true after adding components
    }
于 2013-06-15T19:25:55.340 に答える
0

setVisible(true)メソッド内の最後のメソッド呼び出しでなければなりませんframe()。次のスレッドを参照してください:コンポーネントを追加する前に setVisible(true) を呼び出さないのはなぜですか?

于 2013-06-15T19:26:30.480 に答える
0

setVisible( true )コードの frame() メソッドの最後で呼び出して、可視性をオンに設定する必要があります

于 2013-06-15T19:30:22.930 に答える