java jframe 高度_java - Java Swing JTextfield大小(高度) - 堆栈内存溢出

本文档展示了如何在Java Swing应用程序中使用BorderLayout和GridLayout管理器调整JTextField和JTextArea的高度。通过将文本区域设置为滚动面板并在PAGE_END位置添加一个包含文本字段和底部面板的面板,可以实现所需的高度。同时,讨论了在Swing应用中正确使用布局管理器和Event Dispatch Thread的重要性。
摘要由CSDN通过智能技术生成

使用BorderLayout而不是BoxLayout 。

将文本区域放在BorderLayout.CENTER ,并使用GridLayout(0, 1)将文本字段和底部面板包装在另一个面板中。 将该面板添加到BorderLayout.PAGE_END 。 文本字段的大小与底部面板的大小相同

在旁边

应该在Event Dispatch Thread上运行/启动Swing应用程序。

有关布局管理器的一般信息,请参阅使用容器布局组件

也不确定为什么您的字段和文本不可编辑。

重构

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import javax.swing.*;

public class Test1{

//Should components be final? Should they be defined outside of the class?

private final JTextArea outputArea = new JTextArea();

private final JTextField errorReportField = new JTextField();

private final JPanel inputPanel = new JPanel();

private final JLabel nameLabel = new JLabel("Item Name");

private final JLabel numberLabel = new JLabel("Number of units (or Volume in L)");

private final JLabel priceLabel = new JLabel("Price per unit (or L) in pence");

private final JTextField nameField = new JTextField(10);

private final JTextField numberField = new JTextField(10);

private final JTextField priceField = new JTextField(10);

private final JButton addVolumeButton = new JButton("Add by Volume");

private final JButton addNumberButton = new JButton("Add by number of units");

public Test1() {

JFrame frame = new JFrame("Fuel station shop");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//outputArea.setEditable(false);

outputArea.setRows(30);

JScrollPane scrollPanel = new JScrollPane(outputArea);

scrollPanel.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

//errorReportField.setEditable(false);

//Better way of adding multiple components to panel?

inputPanel.setLayout(new FlowLayout());

inputPanel.add(nameLabel);

inputPanel.add(nameField);

inputPanel.add(numberLabel);

inputPanel.add(numberField);

inputPanel.add(priceLabel);

inputPanel.add(priceField);

inputPanel.add(addVolumeButton);

inputPanel.add(addNumberButton);

Container contentPane = frame.getContentPane();

//Why is it adding components from bottom to top?

contentPane.setLayout(new BorderLayout());

contentPane.add(scrollPanel);

JPanel wrapper = new JPanel(new GridLayout(0, 1));

wrapper.add(errorReportField);

wrapper.add(inputPanel);

contentPane.add(wrapper, BorderLayout.PAGE_END);

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable(){

public void run() {

Test1 test = new Test1();

}

});

}

}

注意

如果您希望字段更大(高度方向),则可以向inputPanel添加空边框,从而导致字段也展开。 但这意味着inputPanel也会更大(可能需要也可能不需要)。 但无论哪种方式,使用GridLayout,字段和inputPanel都将具有相同的大小。

inputPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

另一种选择是给wrapper面板一个BorderLayout并将该字段添加到中心,给它一个EmptyBorder来扩展它的大小。

contentPane.setLayout(new BorderLayout());

contentPane.add(scrollPanel);

JPanel wrapper = new JPanel(new BorderLayout());

wrapper.add(errorReportField);

wrapper.add(inputPanel, BorderLayout.PAGE_END);

Border border = errorReportField.getBorder();

CompoundBorder compound = BorderFactory.createCompoundBorder(

border,BorderFactory.createEmptyBorder(10, 10, 10, 10));

errorReportField.setBorder(compound);

contentPane.add(wrapper, BorderLayout.PAGE_END);

这将在场的左侧给出一个小的余量(这可能是也可能不是所希望的)。 如果您不想要它,只需更改空边框的值。

createEmptyBorder(top, left, bottom, right)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值