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

当你运行它时,如果我扩展它,它会使 textField 非常高,即使我只希望它是某个高度。我怎样才能

4

2 回答 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 :-)

于 2011-09-16T06:51:51.273 回答
3

布局管理器将根据各种约束重置组件的大小。您可以使用 setPreferredSize() 方法而不是 setSize() 来告诉大多数布局管理器该字段的大小。

例如

textField.setPreferredSize(new Dimension(width,height));
于 2011-09-16T05:49:57.947 回答