1

我对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))
        );
}

问题是 Layout 中的组件尽可能大。我不能限制这个大小。问题是,如何为项目设置例如恒定高度?

或者另一方面,调整窗口大小时调用哪个函数?我可以覆盖该函数,getSize 父 JPanel(它在 JPanel 中),然后根据百分比设置大小吗?你怎么看?

// 问题解决了。

在底部变化的第五行

.addGroup(layout.createParallelGroup()

为了

.addGroup(layout.createParallelGroup(BASELINE)

谢谢大家的帮助。

4

2 回答 2

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() ,我建议您查看提到的链接@kleopatra 以获取更多信息。

顺便说一句,问题末尾的代码似乎并不完全正确(至少当我尝试类似的东西时)。据我所知,从底部算起的第五行应该是

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)

而不是

.addGroup(layout.createParallelGroup(BASELINE)
于 2013-09-21T20:47:12.997 回答
-1

setMaximumSize()在您的组件对象中。

于 2012-02-27T20:07:21.560 回答