java - 如何将 JPanel 高度设置为自动

标签 java swing

我不使用 GUI 编辑器手动创建布局,我需要将高度设置为自动,以便整个表单对用户可见。我将 GridLayout 包装到 FlowLayout 中,因此输入不会拉伸(stretch)。创建这样的布局的最佳实践是什么?有人可以修改它,使整个表单可见或使用 GridLayout 但可以设置表单中输入的宽度和高度吗?

package helpdesk;

import java.awt.*;
import javax.swing.*;

/**
 *
 * @author Joko Wandiro
 */
public class Layout extends Base {

    JPanel panel_form_edit = new JPanel();
    FlowLayout layout_form_edit_outer = new FlowLayout(FlowLayout.LEFT);
    JPanel panel_form_edit_outer = new JPanel();
    // Form - Edit
    JLabel label_name_update = new JLabel("Name", JLabel.LEFT);
    JTextField input_id_update = new JTextField();
    JTextField input_name_update = new JTextField();
    JButton btn_update = new JButton("Update");

    public Layout() {
        setLookAndFeel();
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Main Layout
        GridLayout layout = new GridLayout(5, 1, 10, 10);
        setLayout(layout);
        // Form - Edit
        label_name_update.setPreferredSize(new Dimension(400, 20));
        input_name_update.setPreferredSize(new Dimension(400, 20));
        input_id_update.setVisible(false);
        GridLayout layout_form_edit = new GridLayout(4, 1, 10, 10);
        panel_form_edit.setLayout(layout_form_edit);
        panel_form_edit.add(input_id_update);
        panel_form_edit.add(label_name_update);
        panel_form_edit.add(input_name_update);
        panel_form_edit.add(btn_update);
        panel_form_edit_outer.setLayout(layout_form_edit_outer);
        panel_form_edit_outer.add(panel_form_edit);
        add(panel_form_edit_outer);
        panel_form_edit.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        panel_form_edit_outer.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        setVisible(true);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Layout app = new Layout();
    }

    private void setLookAndFeel() {
        try {
            UIManager.setLookAndFeel(
                    "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
            );
        } catch (Exception exc) {
            // ignore error
        }
    }

}

未设置首选尺寸和包装方法

Without set preferred size with pack method

使用打包方法设置首选尺寸

Set preferred size with pack method

将扩展状态设置为最大化,但更新按钮不完全可见。如何设置 JPanel 的高度以使表单完全可见?

Set extended state to maximize

我希望 JFrame 在最大化屏幕中显示。

非常感谢。

最佳答案

I need to set height to auto so the entire form visible to user.

您使用:

pack();
setVisible(true);

pack() 方法将使框架成为添加到框架中的所有组件的首选大小。

label_name_update.setPreferredSize(new Dimension(400, 20));
input_name_update.setPreferredSize(new Dimension(400, 20));

不要使用 setPreferredSize(...)。每个 Swing 组件都会根据文本、字体等确定自己的首选大小。

编辑:

GridLayout layout_form_edit = new GridLayout(5, 1, 10, 10);

上面的行似乎导致了问题。您指定了 5 行,但我猜框架上没有足够的空间容纳 5 行。

尝试:

GridLayout layout_form_edit = new GridLayout(0, 1, 10, 10);

关于java - 如何将 JPanel 高度设置为自动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57705260/

相关文章:

Java 精确日期到字符串的转换(无本地 GMT 偏移量)

java - 消除 Jtable 列之间的单元格间隙

java - 可以在jtable的某些列中显示pdf作为下载链接吗?

java - 如何让JButton打开不同的框架?

java - 用于预约系统的 Swing GUI

java - 重用RequestDispatcher对象

java - 如果在 SparkAction 中使用 PySpark,Oozie 作业将不会运行

java - 获取 360 到 1 之间的集合的平均角度方向

Java JPanel 不可见

java - JTextArea 在 SwingWorker 中打印时不会自动滚动