Java - 如何在 GroupLayout 中调整组件的大小
Posted
技术标签:
【中文标题】Java - 如何在 GroupLayout 中调整组件的大小【英文标题】:Java - How to resize components in GroupLayout 【发布时间】:2012-03-17 06:46:33 【问题描述】: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))
);
问题是布局中的组件尽可能大。我不能限制这个大小。问题是,如何为项目设置例如恒定高度?
或者另一方面,调整窗口大小时调用哪个函数?我可以覆盖那个函数,getSize 父 JPanel(它在 JPanel 中),然后根据百分比设置大小吗?你怎么看?
// 问题解决了。
倒数第五行
.addGroup(layout.createParallelGroup()
为
.addGroup(layout.createParallelGroup(BASELINE)
谢谢大家的帮助。
【问题讨论】:
永远不要调用任何 setXXSize 方法 - ***.com/questions/7229226/… 并且:请学习java命名约定并遵守它们 @user1040813:您可以添加,甚至接受your own answer。你可以引用How to Use GroupLayout。 【参考方案1】:我之所以添加这个,是因为乍一看答案并不像它可能的那么清楚,尽管它确实很好地回答了我自己版本的这个问题:-)
基本上,在 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(),我建议查看提到的the link@kleopatra 以了解更多信息。
顺便说一句,问题末尾的代码似乎并不完全正确(至少当我尝试类似的事情时)。据我所知,从底部算起的第五行应该是
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
而不是
.addGroup(layout.createParallelGroup(BASELINE)
【讨论】:
【参考方案2】:setMaximumSize() 在您的组件对象中。
【讨论】:
谢谢,问题已解决。从底部算起的第五行应该是 .addGroup(layout.createParallelGroup(BASELINE) 而不是 .addGroup(layout.createParallelGroup()。 -1 for setXXSize(是的,我努力找到它们;-),请参阅***.com/questions/7229226/…以上是关于Java - 如何在 GroupLayout 中调整组件的大小的主要内容,如果未能解决你的问题,请参考以下文章