我有以下示例。我想要的是面板的內容與面板的頂部對齊,但它會在面板的中心對齊。我認爲使用GridBagLayout作爲管理器並設置到NORTH的錨點應該做到這一點,顯然它不。將面板內容與面板頂部對齊
試圖澄清幾點:
- 保存按鈕應文本區直屬保持
- 文本區域應該有一個最大高度,因此不會持續增長的框架保持增長
- 保存按鈕應該有固定的寬度。
另外,如果frame的高度太小,textArea會突然調整到只有一行,我想讓它逐漸減小它的大小。
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