次の例があります。私が望むのは、パネルの内容がパネルの上部に揃えられていますが、パネルの中央に配置されていることです。 GridBagLayoutをマネージャとして使用し、NORTHへのアンカーを設定することがそのトリックを行うべきだと思いましたが、明らかにそうではありません。いくつかのポイントを明確にしようとパネルのコンテンツをパネルの上部に揃えます。
:
- ボタンを保存するには、フレームが 成長し続けると、それが成長し続けるしないようにtextAreaは、最大の高さを持つべきでテキストエリア
- 直下に残るべき
- 保存ボタンの幅は固定されている必要があります。
また、フレームの高さが小さすぎると、textAreaは突然1つの行にのみサイズが変更されます。サイズを徐々に縮小したいと思います。
package layouttests;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.MouseInfo;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class LayoutTest extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public LayoutTest()
{
setSize(50, 200);
setLocation(MouseInfo.getPointerInfo().getLocation());
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTH;
JButton okButton = new JButton("Save");
JTextArea textArea = new JTextArea(5,1);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(true);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
gbc.anchor = GridBagConstraints.NORTH;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.BOTH;
panel.add(scrollPane, gbc);
gbc.gridy = 1;
gbc.fill = GridBagConstraints.NONE;
panel.add(okButton, gbc);
panel.setBorder(BorderFactory.createLineBorder(Color.red));
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new LayoutTest();
}
});
}
}
私は 'gbc.weighty = 1.0;'を呼び出すことはあなたの最初の質問のために働くべきだと思います。編集:スクロールペインを同じ高さのままにしたい場合は、スクロールペインを追加した後に呼び出します。 –
それはありますが、副作用があります:textAreaは私が(高さを意味する)よりも大きくなります。テキスト領域の最大高さを制限するにはどうすればよいですか?これはsetMaximumSizeで何かですか? – Philipp
'gbc.fill = GridBagConstraints.BOTH;'を 'gbc.fill = GridBagConstraints.HORIZONTAL;'( 'weighty'と一緒に)に変更しました – MadProgrammer