1

GroupLayoutに問題があります。私のコードは次のとおりです。

public chat () {

        JTextField chatbox;
        JTextField msgbox;
        JButton sendbutton;
        GroupLayout layout;

        super();
        chatbox = new JTextField();
        msgbox = new JTextField();
        sendbutton = new JButton("Send");
        layout = new GroupLayout(this);

        sendbutton.setPreferredSize(new Dimension(60, 20));

        setBackground(new Color(255, 255, 255));

        setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createParallelGroup()
            .addComponent(chatbox)
            .addGroup(layout.createSequentialGroup()
                .addComponent(msgbox)
                .addComponent(sendbutton))
        );

        layout.linkSize(SwingConstants.HORIZONTAL, sendbutton);

        layout.setVerticalGroup(layout.createSequentialGroup()
            .addComponent(chatbox)
            .addGroup(layout.createParallelGroup()
                .addComponent(msgbox)
                .addComponent(sendbutton))
        );
}

そして問題は、レイアウトのコンポーネントが可能な限り大きいことです。このサイズを制限することはできません。問題は、たとえばアイテムの一定の高さを設定する方法です。

または、ウィンドウのサイズが変更されたときに呼び出される関数はどれですか? Maby はその関数、親 JPanel の getSize (JPanel 内) をオーバーライドし、パーセンテージに基づいてサイズを設定できますか? どう思いますか?

// 問題が解決しました。

下から 5 行目で変更

.addGroup(layout.createParallelGroup()

為に

.addGroup(layout.createParallelGroup(BASELINE)

助けてくれてありがとう。

4

2 に答える 2

0

私がこれを追加しているのは、この質問の私自身のバージョンに非常によく答えましたが、一見すると答えが可能な限り明確ではないためです:-)

基本的に、GroupLayout で垂直方向のグループを作成するときに、コンポーネントを (ほとんどの場合) 好みの高さにしたい場合は、引数 GroupLayout.Alignment.BASELINE を追加できます。

BASELINE 引数について説明しますが、Oracle のドキュメント ( http://docs.oracle.com/javase/7/docs/api/javax/swing/GroupLayout.ParallelGroup.html ) の方がはるかに優れています。

ベースラインは、ベースラインを持つ各要素の優先高に基づいて計算されます。ベースラインは、次のアルゴリズムを使用して計算されます: max(maxNonBaselineHeight, maxAscent + maxDescent)。ここで、maxNonBaselineHeight は、ベースラインを持たない、またはベースラインに沿って配置されていないすべての要素の最大の高さです。

他の人が述べているように、setMaximumSize() は使用しないでください。詳細については、@kleopatraのリンクを参照することをお勧めします。

ちなみに、質問の最後のコードは完全に正しいようには見えません(少なくとも私が似たようなことを試したとき)。私が知る限り、下から5行目は

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)

それよりも

.addGroup(layout.createParallelGroup(BASELINE)
于 2013-09-21T20:47:12.997 に答える
-1

コンポーネント オブジェクトにsetMaximumSize()を追加します。

于 2012-02-27T20:07:21.560 に答える