2

Could somebody tell me which java layout I need to use to achieve the layout below:

Correct AddressBook Layout

I am currently playing out with the FlowLayout however I can’t get the entry fields to line up beside the output window:

Bad Layout

Apologies if this is a simple question this is my first time using java. Here is my frame code:

    private void makeFrame()
     {
       setLayout(new FlowLayout(0));

    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JPanel panel5 = new JPanel();
    JPanel panel6 = new JPanel();
    JPanel panel7 = new JPanel();

    panel1.setLayout(new FlowLayout(0));
    panel2.setLayout(new FlowLayout(0));
    panel3.setLayout(new FlowLayout(0));
    panel4.setLayout(new FlowLayout(0));
    panel5.setLayout(new FlowLayout(0));
    panel6.setLayout(new FlowLayout(0));
    panel7.setLayout(new FlowLayout(0));

    JLabel firstnameJLabel = new JLabel("First Name");
    JLabel lastnameJLabel = new JLabel("Last Name");
    JLabel streetJLabel = new JLabel("Street");
    JLabel townJLabel = new JLabel("Town");
    JLabel postcodeJLabel = new JLabel("Post Code");


    panel1.add(listAllBtn);
    panel1.add(listPersonalBtn);
    panel1.add(listBusinessBtn);
    panel1.add(addPersonalBtn);
    panel1.add(addBusinessBtn);
    panel1.add(deleteBtn);
    panel1.add(findBtn);
    panel1.add(quitBtn);


    panel2.add(firstnameJLabel);
    panel2.add(this.firstNameField);
    panel2.add(this.bookScrollPane);
    this.outputArea.setEditable(false);


    panel3.add(lastnameJLabel);
    panel3.add(this.lastNameField);

    panel4.add(streetJLabel);
    panel4.add(this.streetField);

    panel5.add(townJLabel);
    panel5.add(this.townField);

    panel6.add(postcodeJLabel);
    panel6.add(this.postcodeField);

    panel7.add(enterBtn);


    add(panel1);
    add(panel2);
    add(panel3);
    add(panel4);
    add(panel5);
    add(panel6);
    add(panel7);

    enterBtn.addActionListener(this);
  }
4

5 に答える 5

3

Swing を使用してからしばらく経ちましたが、アーキテクチャは次のようになります。

ここに画像の説明を入力

  1. 下部にBorderLayoutのパネルがあります
  2. その中に、NORTH、WEST、CENTER、EAST の合計 4 つの新しいパネルを追加します。
  3. BorderLayout.NORTH では、FlowLayout.LEFT を持つパネルを追加します
  4. BorderLayout.WEST で、GroupLayout.YAXIS を持つパネルを追加します。このパネルには、名前などのラベルと ENTER ボタンが含まれています
  5. BorderLayout.CENTER で、ラベルに対応するテキストフィールドを追加します
  6. BorderLayout.EAST に JSCrollpane を追加します。

これによりアイデアが得られる場合があり、これらのさまざまなパネルをいじって、必要なものを実現できます

于 2013-04-22T09:49:37.857 に答える
0

前のコメントで述べたように、このプロジェクトでは MigLayout を使用します。正しいレイアウトを得るために、各フィールドまたはテキストボックスの後に分割、スパン、およびラップを使用できるため。また、Miglayout をデバッグして、レイアウトが正しいか間違っているかを確認することもできます。

ここから MigLayout の最新バージョンをダウンロードしてください: http://www.migcalendar.com/miglayout/versions/

日食を使用している場合、

  • プロジェクトフォルダー内のLibというフォルダーに保存します。
  • プロジェクトのビルド パスを構成しますが、jar ファイルをクラスパスに追加します。
  • 次に、レイアウトを MigLayout に設定できるはずです。

panel.setLayout(new MigLayout());

またはレイアウトをデバッグするには -panel.setLayout(new MigLayout("debug"));

于 2013-04-22T11:16:22.717 に答える
0

高レベルのページ レイアウトには MigLayout を使用し、. 基本的にはグリッド レイアウトですが、非常に使いやすいです。ただし、Miglayout はアイテムをラップできません。これは明らかに Swing の設計上の問題です。WrapLayout はその機能を提供するレイアウト マネージャーですが、問題が発生する可能性があります。

http://tips4java.wordpress.com/2008/11/06/wrap-layout/

あなたが提供したスクリーンショットを見ると、あなたがそれを分割したい方法でモックアップしました. 合計 9 行 (0-8) と合計 3 列 (0-2) になります。最上部のコントロールのようなものについては、3 つの列すべてに「またがる」ことになります。

テキストについては、行 1 の個々のボックス内にテキストを配置するだけで、名前の場合は行 1 の列 1、姓の場合は行 2 の列 1 などになります。

入力ボックスでも同じことを行います。

下の図では、青色が列、オレンジ色が行です。

グリッドレイアウト

要約すると、

  • 高レベルのレイアウトにはMiglayoutを使用します。HTML でテーブルを使用するようなものです。
  • 他のレイアウト マネージャーを使用して、Miglayout が提供するグリッド ボックス内にアイテムをレイアウトします。
于 2013-04-22T09:53:57.500 に答える
0

UI が少し複雑なため、最適な選択はGridbag レイアウトを使用することです。GridBag レイアウトは、正確な UI を実現するために必要なすべてのサポートを提供します。親パネルを使用してから、その中の子パネルを使用する必要があります。別の GridBag レイアウトを追加するには、インセットと必要な成長を追加して、目的を達成することができます。

于 2013-04-22T09:53:57.637 に答える