我遇到了 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中),然后根据百分比设置大小?你觉得怎么样?
//问题解决了。
从底部变化的第五行
.addGroup(layout.createParallelGroup()
代表
.addGroup(layout.createParallelGroup(BASELINE)
谢谢大家的帮助。
答案 0 :(得分: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(),我建议查看the link提到的@kleopatra以获取更多信息。
顺便说一下,问题末尾的代码似乎并不完全正确(至少当我尝试类似的东西时)。据我所知,底部的第五行应该是
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
而不是
.addGroup(layout.createParallelGroup(BASELINE)
答案 1 :(得分:-1)
setMaximumSize()在您的组件对象中。