3

ここ Java Swing には単純な問題があります。コードを次のスニペットに簡略化しました。現在のコードでは、水平方向の JSeparator と次の JTextField の間のギャップ サイズを最小限に抑える方法がわかりません。

        GroupLayout layout = new GroupLayout(jPanel1);          
        jPanel1.setLayout(layout);

        layout.setHorizontalGroup(layout.createParallelGroup()
            .addGroup(layout.createSequentialGroup()
                  .addGroup(layout.createSequentialGroup()
                        .addComponent(button)
                      ))
                  .addComponent(jSeparator)
                  .addComponent(jTextField)
            );
        layout.setVerticalGroup(layout.createSequentialGroup()
                .addComponent(button)
                .addComponent(jSeparator)
                .addComponent(jTextField)
            );  

また、一般的に、ギャップサイズを任意の整数表現値に制御するにはどうすればよいaddPreferredGapですか?

ありがとうございました。

さて、これは上記のコードから生成されたウィンドウです: ここに画像の説明を入力

JSeparator と JTextField の間のスペースが非常に広いことがわかります。

4

2 に答える 2

3

sscceがない場合、表示されていないコードに問題があるようです。親コンテナのレイアウトまたはpack()関与する可能性があります。のデフォルトのレイアウトJFrameBorderLayout; デフォルトの位置は ですCENTER。これは、コードを比較するためのsscceです。

GroupLayout補遺: あなたのパネルの親は別のものであるとコメントしてJPanel、あなたは次のように尋ねました。

私の状況でこれを機能させる方法を知っていますか?

はい、以下に示すように、囲みJPanelに適切なレイアウトを付けGridLayoutてください。後者は、この点BorderLayout.CENTERで の とよく似た動作をします。JFrame

グループパネル

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/questions/6769722 */
public class GroupPanel extends JPanel {

    private final JButton button = new JButton("Start");
    private final JSeparator jSeparator = new JSeparator();
    private final JTextField jTextField = new JTextField(10);

    public GroupPanel() {
        GroupLayout layout = new GroupLayout(this);          
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createParallelGroup()
            .addComponent(button)
            .addComponent(jSeparator)
            .addComponent(jTextField)
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addComponent(button, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jSeparator, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jTextField, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
        );
    }

    private static void display() {
        JFrame f = new JFrame("GroupPanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 0));
        f.add(new GroupPanel());
        f.add(new GroupPanel());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
于 2011-07-21T02:23:13.643 に答える
2

垂直レイアウトで、次の方法でセパレータを追加します。

addComponent(separator, GroupLayout.PREFERRED_SIZE,
             GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
于 2012-01-13T16:34:58.587 に答える