2016-05-23 3 views
1

次のGroupLayoutでは、2つの列(赤とオレンジ)は、同じ全体の高さと位置を共有する点を除いて、独立した垂直方向の配置を持ちます。底オレンジ項目の下に追加されて隙間なくGroupLayoutの複数の列のパディング

Desired layout

、その項目は赤色カラムの全体の高さに一致するように垂直に延伸なります。これは受け入れられない(JComboBoxであり、ひどい)。私が見つけた唯一の解決策は、(オレンジ色のアイテムの底に)正確な寸法の固定された高さのギャップを追加することです。この問題を動的に(つまり定数を使用せずに)解決する方法はありますか?

+2

'GroupLayoutは、Matisse'などのGUIビルダーのために開発された、それはまた、SpringLayoutは取って代わられていレイアウトマネージャです。これにはGUIビルダーの使用を検討し、SpringLayoutへのアップグレードを検討してください。 (私たちはあなたのコードをこのために使うことができました) – markspace

+1

@markspace:[mcve]についての良い点; GroupLayout'は1.6以降です。 1.4以降のSpringLayout – trashgod

答えて

1

答えはaddComponent()メソッドにあります。それにはさらに3つのパラメータ、すなわちコンポーネントの最小サイズ、優先サイズ、最大サイズがあります。 JComboBoxが垂直に伸びないようにするには、垂直グループの最大サイズをGroupLayout.PREFERRED_SIZEに設定する必要があります。ここで

package com.zetcode; 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.EventQueue; 
import javax.swing.GroupLayout; 
import javax.swing.JComboBox; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JPanel; 

public class GroupLayoutMultipleColumns extends JFrame { 

    public GroupLayoutMultipleColumns() { 

     initUI(); 
    } 

    private void initUI() { 

     JPanel green1 = createPanel(new Color(60, 170, 70)); 
     JPanel green2 = createPanel(new Color(60, 170, 70)); 
     JPanel red1 = createPanel(new Color(230, 0, 50)); 
     JPanel red2 = createPanel(new Color(230, 0, 50)); 
     JPanel red3 = createPanel(new Color(230, 0, 50)); 
     JPanel red4 = createPanel(new Color(230, 0, 50)); 

     JComboBox combo1 = new JComboBox(); 
     JComboBox combo2 = new JComboBox(); 

     createLayout(green1, red1, red2, red3, red4, 
       combo1, combo2, green2); 

     setTitle("Multiple columns"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public JPanel createPanel(Color col) { 

     JPanel panel = new JPanel(); 
     panel.setBackground(col); 
     return panel; 
    } 

    private void createLayout(JComponent... arg) { 

     Container pane = getContentPane(); 
     GroupLayout gl = new GroupLayout(pane); 
     pane.setLayout(gl); 

     gl.setAutoCreateContainerGaps(true); 
     gl.setAutoCreateGaps(true); 

     gl.setHorizontalGroup(gl.createParallelGroup() 
       .addComponent(arg[0]) 
       .addGroup(gl.createSequentialGroup() 
         .addGroup(gl.createParallelGroup() 
           .addComponent(arg[1]) 
           .addComponent(arg[2]) 
           .addComponent(arg[3]) 
           .addComponent(arg[4])) 
         .addGroup(gl.createParallelGroup() 
           .addComponent(arg[5]) 
           .addComponent(arg[6]))) 
       .addComponent(arg[7]) 
     ); 

     gl.setVerticalGroup(gl.createSequentialGroup() 
       .addComponent(arg[0]) 
       .addGroup(gl.createSequentialGroup() 
         .addGroup(gl.createParallelGroup() 
           .addGroup(gl.createSequentialGroup() 
             .addComponent(arg[1]) 
             .addComponent(arg[2]) 
             .addComponent(arg[3]) 
             .addComponent(arg[4])) 
           .addGroup(gl.createSequentialGroup() 
             .addComponent(arg[5], GroupLayout.DEFAULT_SIZE, 
               GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) 
             .addComponent(arg[6], GroupLayout.DEFAULT_SIZE, 
               GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))) 
       .addComponent(arg[7]) 
     ); 

     pack(); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(() -> { 
      GroupLayoutMultipleColumns ex = new GroupLayoutMultipleColumns(); 
      ex.setVisible(true); 
     }); 
    } 
} 

はスクリーンショットです:

enter image description here

関連する問題