2016-03-20 5 views
0

次のスイングコンポーネントがあります。画像をご覧ください。 ラベルとコンボボックス、ラベル、およびテキストフィールドが正しく整列していません。この問題の原因は何ですか?JPanelのスイングコンポーネントを左揃えにする方法

The category Label and combo box are not aligned properly

私はパネルでのGridBagLayoutを使用しています。ラベルやコンボボックス、テキストフィールドなどのコンポーネントをパネルに追加します。

以下は、私が使用したコードです。

srchCategoryLbl = new JLabel("Category"); 
    categoryCmb = new JComboBox<>(); 
    categoryCmb.setPreferredSize(dimensionTxt); 
    categoryCmb.setBounds(0, 0, 0, 0); 

    srchProductCodeLbl = new JLabel("Product Code"); 
    productCodeTxt = new JTextField(); 
    productCodeTxt.setPreferredSize(dimensionTxt); 

    srchProductDescLbl = new JLabel("Product Desc"); 
    productDescTxt = new JTextField(); 
    productDescTxt.setPreferredSize(dimensionTxt); 

    searchBtn = new JButton("Search"); 

    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.anchor = GridBagConstraints.WEST; 
    searchPanel.add(srchCategoryLbl, gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 1; 
    searchPanel.add(categoryCmb, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductCodeLbl, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 1; 
    searchPanel.add(productCodeTxt, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductDescLbl, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 1; 
    searchPanel.add(productDescTxt, gbc); 

    gbc.gridx = 3; 
    gbc.gridy = 1; 
    searchPanel.add(searchBtn, gbc); 
+1

私はあなたの問題を解決しないと思うが、通常はsetBoundsとsetPreferrededSizeの使用をお勧めしません。 LayOut Managerでコンポーネントの位置とサイズを処理させます。 –

+0

@FranciscoPuga、その場合、コンポーネントのサイズはどのように設定しますか? – Mayuran

+0

Macをお使いですか?テキストフィールドの周りに特別な「フォーカス」境界線を配置し、テキストフィールドを表示することができます。あなたは、いくつかのピクセルでラベルを右に動かして補うことができます – MadProgrammer

答えて

2

いずれかのフィールドを選択すると、MacOSのは、これはいくつかの種類のカスタムBorderの使用によって達成され、フィールドの周りに「フォーカス」四角形を配置していることがわかります。

Fields

あなたはnull(または他の何か)に境界を設定することができ、それは、他のルックに影響を与える可能性があり、予期しない方法で感じ、彼らは

を理解していないことな方法でユーザーエクスペリエンスを変更しますよりよい解決策は...ちょっとラベルパッドにGridBagConstraints#insetsプロパティを使用することです

Some Padding

JLabel srchCategoryLbl = new JLabel("Category"); 
JComboBox<Object> categoryCmb = new JComboBox<>(); 
categoryCmb.setPrototypeDisplayValue("This is a really long test string"); 

JLabel srchProductCodeLbl = new JLabel("Product Code"); 
JTextField productCodeTxt = new JTextField(20); 

JLabel srchProductDescLbl = new JLabel("Product Desc"); 
JTextField productDescTxt = new JTextField(20); 

JButton searchBtn = new JButton("Search"); 

setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 
Insets labelInsets = new Insets(0, 4, 0, 4); 
Insets fieldInsets = new Insets(0, 0, 0, 0); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.anchor = GridBagConstraints.WEST; 
gbc.insets = labelInsets; 
add(srchCategoryLbl, gbc); 

gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(categoryCmb, gbc); 

gbc.gridx = 1; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductCodeLbl, gbc); 

gbc.gridx = 1; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productCodeTxt, gbc); 

gbc.gridx = 2; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductDescLbl, gbc); 

gbc.gridx = 2; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productDescTxt, gbc); 

gbc.gridx = 3; 
gbc.gridy = 1; 
add(searchBtn, gbc); 

また、これはクロスプラットフォームUIの不都合な問題の1つです。これは、現在のプラットフォームに基づいて必要なインセットを決定する方法を考案する必要があるためです。

私は非常にあなたの代わりにコンポーネントの適切なサイズを計算に入り、たくさんありますよう、setPreferredSizeの使用を避ける(setColumnsJTextField上のような)がすでに使用可能な機能を利用することもをお勧めします、参照いくつかの例の上のコード

関連する問題