0

2 つの行と 2 つの列 [最初の列にはラベルがあり、2 番目の列にはテキスト フィールドがあります] を持つ GUI を取得する必要があります。以下のコードを書きましたが、列と行に入れることができません。列と行にするのを手伝ってください。

 public void showstate(){

       MyPanel b=new MyPanel();
       f.setBounds(50, 50, 800, 600);
       f.add(b);
       b.updateState(result);
       f.setVisible(true);
       System.out.println("Number of times AC is on:" + AcCounter);
       System.out.println("Number of times Heater is on:" + HeaterCounter);


}

class MyPanel extends JPanel {

    /**
 * 
 */
private static final long serialVersionUID = 1L;
    private JTextField t;
    private JTextField v;


    public MyPanel() {
    //setBorder(BorderFactory.createLineBorder(Color.black));


    JLabel l = new JLabel("THE STATUS OF AC IS");


    this.add(l);
    t = new JTextField("<html><table><tr><td></td><td></td></tr><br></br></table></html>");

    this.add(t);
    //JLabel l = new JLabel("");  
   l.setBounds(100, 100, 30, 30);

    JLabel p = new JLabel("THE STATUS OF HEATER IS");


    p.setAlignmentX(LEFT_ALIGNMENT);
    p.setHorizontalAlignment(30);
    p.setBounds(100, 200, 30, 30);
    this.add(p);
    v = new JTextField("<td></td></tr></table></html>");

    this.add(v);



  // JLabel m = new JLabel("<html> <span><br><br><br>Accounter</br></br></br></span>    </html> ",JLabel.CENTER);


  //m.setBounds(100, 300, 30, 30);

 // JLabel n = new JLabel("<html> <span><br><br><br>Heatercounter</br></br></br></span></html> ", JLabel.CENTER);

    //n.setBounds(100, 400, 30, 30);


    t.setBounds(300, 400, 30, 50);

  //  q = new JTextField("");
  //  w = new JTextField("");

   // this.add(m);
 //   this.add(q);
   // this.add(n);
 //   this.add(w);

}

public void updateState(String result) {

    String ac, ab;
   //     double AcIsOn,HeaterIsOn;

    if ("aboveHt".equals(result) || "coolAir".equals(result)) {
        ac = "cooler on";
        AcCounter++;
    } else {
        ac = "cooler off";
    }


     if(temperature==72){ 
        ab = "Heater off";
    }
     else  if ("belowHt".equals(result)) {
         ab = "Heater on";
         HeaterCounter++;
        // AcCounter=1;
     }
    else {
        ab = "Heater off";
    }                                               
      t.setText(ac);
     v.setText(ab);

}        
}

The Status Of Ac JTextField The Status Of Heater JTextFieldという出力を1 行で取得しています。

4

3 に答える 3

3

Swing で物事をレイアウトする適切な方法は、レイアウト マネージャーを使用することです。パネルには FlowLayout のデフォルト レイアウトがあり、観察しているように、すべてのコンポーネントを 1 行に配置します。

GridLayout、BoxLayout の組み合わせ、またはより複雑なものを使用できます。レイアウト マネージャー向けのチュートリアルを参照して、選択を行ってください。

于 2013-11-05T22:09:22.877 に答える
1

LayoutManagerについて読むことをお勧めします。GUIを構築するのに役立ちます。

以下は、GridLayout1 つの列に 2 つのラベルと 2 つの列 2 フィールドがある例です。

public class Example extends JFrame {

public Example() {
    setLayout(new GridLayout(2,2));
    JLabel l1 = new JLabel("l1");
    JLabel l2 = new JLabel("l2");
    JTextField f1 = new JTextField();
    JTextField f2 = new JTextField();

    add(l1);
    add(f1);
    add(l2);
    add(f2);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main(String...strings ){
    Example e = new Example();
}

}
于 2013-11-05T22:10:52.993 に答える