2016-06-22 9 views
1

私はSwing Programmingを学ぼうとしています。Java Swingレイアウト - 使用するレイアウト

さまざまなレイアウトのJavaドキュメントを読んでいます。私はいくつかのチュートリアルも読みました。しかし、私はレイアウトが非常に単純なDialogよりも何に使われるのかを本当に理解することはできません。私はコードで(WindowBuilder Proではなく)これをやりたいだけです。

これはビルドしたいダイアログです。

enter image description here

注意事項を除き、何も編集可能ではありません。

この種類のダイアログにはどのようなレイアウトが最適ですか?

+0

ことの一つは、レイアウトを組み合わせることです。私はここでそれをやるだろう。 –

答えて

5

レイアウトの種類を実行するために、GridBagLayoutまたはGroupLayoutを使用できます。レイアウトを理解するためにここで

便利なリンク:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

図に見られるようにし、あなたには、いくつかの列(行によって2)を持っている必要があります。

これを行うために、
GridBagLayoutは、コンポーネントをセルのグリッド内に配置して配置します。
GroupLayoutは水平レイアウトと垂直レイアウトで別々に動作します。レイアウトは、各次元ごとに独立して定義されます。シンプルさとパワーを望んでいる手でGUIレイアウトを書いてJava開発者のための - あなたの例のためにそう

は、グループまたはGridBagLayoutの

+0

私はこの質問をする前に5回のようなリンクを読んだ。それを読んだ後、私はGridBagやGroupがなぜ私の必要性に適しているのか理解できませんでした。そして、なぜ他のレイアウトのどれも。理由を理解することに興味があります – user93353

+0

あなたのダイアグラムに見られるように、いくつかの列(行ごとに2つ)が必要です。これを行うために、GridBagLayoutは、コンポーネントをセルのグリッド内に配置することによってコンポーネントを揃えます。 GroupLayoutは水平と垂直のレイアウトで別々に動作します。レイアウトは、各次元ごとに独立して定義されます。 あなたの例では、GroupまたはGridBagLayoutによって定義された3つのパネル(CustInfo、LastordersおよびNotes)を定義する必要があります。 –

+2

@JérèmLeBlondこのコメントを回答に追加する必要があります。それは答えそのものよりも有用です。 – Endery

4

MigLayoutによって定義された3つのパネル(CustInfo、Lastordersとノート)を定義する必要があります。

1

MigLayout第1、GroupLayout秒。

MigLayoutとサンプル溶液:

package com.zetcode; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 

/** 
* A practical example of MigLayout manager. 
* @author Jan Bodnar 
* Website: zetcode.com 
*/ 
public class CustomerDetailsMigLayoutEx extends JFrame { 

    public CustomerDetailsMigLayoutEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JLabel custId1 = new JLabel("Cust Id"); 
     JLabel custId2 = new JLabel("A525"); 

     JLabel name1 = new JLabel("Name"); 
     JLabel name2 = new JLabel("Joe Beer"); 

     JLabel address1 = new JLabel("Address"); 
     JLabel address2 = new JLabel("112, 1st Street, City, State, Country"); 

     JLabel orders = new JLabel("<html><u style='font-size:13px'>Last 3 Orders</u></html>"); 

     JLabel date1 = new JLabel("11 Dec 2015"); 
     JLabel date2 = new JLabel("17 Dec 2015"); 
     JLabel date3 = new JLabel("19 Dec 2015"); 

     JTextArea area1 = new JTextArea(7, 28); 
     area1.setBorder(BorderFactory.createEtchedBorder()); 

     JTextArea area2 = new JTextArea(7, 28); 
     area2.setBorder(BorderFactory.createEtchedBorder()); 

     JTextArea area3 = new JTextArea(7, 28); 
     area3.setBorder(BorderFactory.createEtchedBorder()); 

     JTextArea area4 = new JTextArea(7, 28); 
     area4.setBorder(BorderFactory.createEtchedBorder());   

     JButton btn1 = new JButton("Submit"); 
     JButton btn2 = new JButton("Cancel"); 

     createLayout(custId1, custId2, name1, name2, address1, address2, 
       orders, date1, area1, date2, area2, date3, area3, 
       area4, btn1, btn2); 

     setTitle("MigLayout example"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private void createLayout(JComponent... arg) { 

     setLayout(new MigLayout("insets dialog, align 50% 50%, gap 5lp 7lp")); 

     add(arg[0], "split 2, sgx"); 
     add(arg[1], "gapx 15lp, wrap"); 
     add(arg[2], "split 2, sgx"); 
     add(arg[3], "gapx 15lp, wrap"); 
     add(arg[4], "split 2, sgx"); 
     add(arg[5], "gapx 15lp, wrap");   
     add(arg[6], "gapy unrel, wrap"); 
     add(arg[7], "gapy rel, split 2"); 
     add(arg[8], "wrap"); 
     add(arg[9], "split 2"); 
     add(arg[10], "wrap"); 
     add(arg[11], "split 2"); 
     add(arg[12], "wrap"); 
     add(arg[13], "growx");   
     add(arg[14], "split 2, flowy");  
     add(arg[15]);  
     pack(); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      CustomerDetailsMigLayoutEx ex = new CustomerDetailsMigLayoutEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

スクリーンショット:一般的に行わ

Screenshot of the code example

関連する問題