如何在BoxLayout中改变元素的大小?

4

我有这个类:

package com.erikbalen.game.rpg;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Gui extends JFrame implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = -384241835772507459L;
JLabel playerInfo;
JTextField textField;
private final static String newline = "\n";
JTextArea feed;
JScrollPane scrollPane;
Player player;

public Gui() {
    super("Erik's RPG");

    //setLayout(new FlowLayout());

    Container contentPane = this.getContentPane();
    contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.PAGE_AXIS));

    textField = new JTextField(30);

    textField.addActionListener(this);


    feed = new JTextArea(15, 30);
    feed.setEditable(false);
    scrollPane = new JScrollPane(feed);
}

当你运行它时,它会使文本框变得非常高,即使我只想让它保持特定的高度。我该怎么办?

1
你的代码不是 SSCCE(不是独立的,组件未添加或顶层可见,无法运行)- 请下次投入更多的精力 :-) - kleopatra
component.setMaximumSize() 对我有用。 - M Umair
2个回答

7

BoxLayout会使组件扩展到其最大大小,JTextField在返回Short.Max(或Integer.Max,忘了)的最大高度时表现不佳。解决方法是让字段行为良好:

    @Override
    public Dimension getMaximumSize() {
        // TODO Auto-generated method stub
        Dimension dim = super.getMaximumSize();
        dim.height = getPreferredSize().height;
        return dim;
    }

或者,使用另一个LayoutManager :-)


+1 更多细节可以在指定组件大小中找到。 - trashgod
1
+1,我从来没有理解为什么文本字段不是默认行为。 - camickr

3

布局管理器会基于不同的限制条件重置组件的大小。您可以使用setPreferredSize()方法而不是setSize()方法告诉大多数布局管理器该字段应该是什么大小。

例如:

textField.setPreferredSize(new Dimension(width,height));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接