0

JavaAWTを使用してログインフォームを作成しようとしています。そして、私はそれを作りました。しかし、ボタンをクリックすると、「ピン」を除くすべてのファイルが正しい場所に表示されます。「ピン」は「名前」と同じ寸法で表示されていました。「ピン」テキストフィールドの位置を変更できません。なぜ?これはコードです:

    import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Loginform extends Frame implements ActionListener
{ 
  Label l1=new Label("Name");
  Label l2=new Label("Street");
  Label l3=new Label("City");
  Label l4=new Label("Pin");
  Label l5=new Label("  ");
  Label l6=new Label("  ");
  Label l7=new Label("   ");
  Label l8=new Label("    ");
  TextField t1=new TextField();
  TextField t2=new TextField();
  TextField t3=new TextField();
  TextField t4=new TextField();
  Button b= new Button("Submit");
  public Loginform()
  { add(l1);
    add(t1);
    add(l2);
    add(t2);
    add(l3);
    add(t3);
    add(l4);
    add(t4);
    add(b);
    add(l5);
    add(l6);
    add(l7);
    add(l8);
    l1.setBounds(20,45,70,20);
    t1.setBounds(180,45,200,20);
    l2.setBounds(20,95,70,20);
    t2.setBounds(180,95,200,20);

    l3.setBounds(20,135,70,20);
    t3.setBounds(180,135,200,20);
    l4.setBounds(20,175,70,20);
    t4.setBounds(180,175,200,20);

    l5.setBounds(20,300,70,20);
    l6.setBounds(20,320,70,20);
    l7.setBounds(20,340,70,20);
    l8.setBounds(20,360,70,20);

    b.setBounds(410,245,70,20);
    b.addActionListener(this);

    addWindowListener(new mwa());
  }
  public void actionPerformed(ActionEvent e)
  { 
      l5.setText("Name: "+t1.getText());
      l6.setText("Street: "+t2.getText());
      l7.setText("City: "+t3.getText());
      l8.setText("Pin: "+t4.getText());

  }
  public static void main(String s[])
  {
     Loginform l=new Loginform();
    l.setSize(new Dimension(600,600));
    l.setTitle("REGISTRATION");
    l.setVisible(true);
  }
}
class mwa extends WindowAdapter
{ public mwa(){}
  public void windowClosing(WindowEvent e)
  { System.exit(0);
  }
}
4

1 に答える 1

2

ラベルを保持するコンテナのデフォルトのレイアウトマネージャを尊重していないため、ほとんどのラベルがGUIに表示されません。デフォルトでBorderLayoutを使用するコンテナ(フレーム)に追加するため、最後に追加されたラベルのみが表示されます。これが正しいことを示すには、actionPerformedを次のように変更します。

public void actionPerformed(ActionEvent e) {
  l5.setText("Name: " + t1.getText());
  l6.setText("Street: " + t2.getText());
  l7.setText("City: " + t3.getText());
  l8.setText("Pin: " + t4.getText());

  System.out.println("l5: " + l5.getBounds());
  System.out.println("l6: " + l6.getBounds());
  System.out.println("l7: " + l7.getBounds());
  System.out.println("l8: " + l8.getBounds());

}

そして、あなたは見るでしょう:

l5: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l6: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l7: java.awt.Rectangle[x=0,y=0,width=0,height=0]
l8: java.awt.Rectangle[x=8,y=30,width=584,height=562]

このコードを機能させるには、ラベルを表示する必要があります。私は提案します:

  • コンポーネントの境界、位置、または位置を設定することは避けてください。
  • レイアウトマネージャーの使用方法に関するチュートリアルを読み、それらを使用すると、見栄えがよく簡単に表示され、柔軟性があり、簡単に変更できるGUIを作成するのに役立ちます。
  • AWTの使用を避け、Swingに移行してください。これは、より堅牢で強力です。
  • 変数名をその目的を説明する名前に変更して、コードを自己コメント化します。
于 2013-03-03T06:36:07.703 に答える