为何使用GridBagLayout时JTextArea显示尺寸过小?
问题原因
MainFrame给两个面板加布局约束时,没有设置weightx和fill属性,导致两个面板没有平分窗口宽度,也不会拉伸铺满可用区域- 自定义
Panel类中,JTextArea所在行的布局约束没有设置gridwidth,默认只占1列宽度,而下方第二行是2列布局(标签、按钮各占1列),因此文本区无法铺满面板全宽
修复方案
1. 修改MainFrame的layoutComponents方法
给GridBagConstraints添加拉伸属性,让左右两个面板平分窗口空间:
private void layoutComponents() { setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); // 新增以下三行配置 gc.weightx = 1; gc.weighty = 1; gc.fill = GridBagConstraints.BOTH; gc.gridx = 0; gc.gridy = 0; add(leftPanel, gc); gc.gridx = 1; gc.gridy = 0; add(rightPanel, gc); }
2. 修改Panel类中文本区的布局约束
给文本区的约束添加跨2列配置:
// First Row // gc2.gridx = 0; gc2.gridy = 0; gc2.weightx = 2; gc2.weighty = 1; gc2.fill = GridBagConstraints.BOTH; // 新增以下行,指定文本区跨2列 gc2.gridwidth = 2; add(new JScrollPane(textArea), gc2);
可选优化
如果需要文本区默认有更合理的初始大小,可以在实例化JTextArea时指定行列数:
textArea = new JTextArea(10, 20);
修复后运行即可看到JTextArea铺满所在面板的全宽,左右两个面板平分窗口空间,符合预期布局效果。
内容的提问来源于stack exchange,提问作者andy_07
相关产品推荐
相关产品推荐

