当前位置: 首页 > 知识库问答 >
问题:

如何将JPanel高度设置为自动

沈建柏
2023-03-14

我不使用GUI编辑器手动创建布局,我需要将高度设置为“自动”,以便用户可以看到整个表单。我将GridLayout包装到FlowLayout中,这样输入就不会被拉伸。创建这样的布局的最佳实践是什么。是否有人可以修改它,使整个表单可见或使用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
        }
    }

}

未使用包装方法设置首选尺寸

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

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

我想在最大化屏幕上显示JFrame。

非常感谢。

共有2个答案

长孙鸿波
2023-03-14

我使用JScrollPane使JFrame可滚动,以便整个表单可见。

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);
        // Set window or jframe scrollable
        Container container = getContentPane();
        JScrollPane scroll = new JScrollPane(container);
        setContentPane(scroll);
        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
        }
    }

}
易自珍
2023-03-14

我需要将“高度”设置为“自动”,以便用户可以看到整个表单。

您使用:

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);
 类似资料:
  • 问题内容: 我想使一个组件占据Container的maximumAvailableHeight。例如,在下面粘贴的代码中,我将根框架定为800,600。我只想设置该框架的高度/宽度(并且我不想尝试对其子像素进行像素化)。如果运行此命令,则会看到UI对齐不良。 首先,我希望面板(位于根框架内)占据框架的100%的高度(在这种情况下,为800px减去用于绘制框架标题的空间)。 其次,在面板内部,我有一

  • 问题内容: 我有一个包装器div,其中两个容器彼此相邻。在此容器上方,我有一个包含我的标头的div。包装div必须为100%减去标题的高度。标头约为60像素。这是固定的。所以我的问题是:如何将包装div的高度设置为100%减去60像素? 问题答案: 这是一个正常工作的CSS,已在Firefox / IE7 / Safari / Chrome / Opera下进行了测试。 w3c尚未批准“ over

  • 我的如下所示,高度设置为40度。 在MyEclipse中,它如下所示: 但是当我在手机上运行它时,它看起来像下面这样: 所以我的问题是为什么进度条的真实高度不是我设置的高度?如何增加进度条的高度?

  • 问题内容: 我有三分之二的div。所包含的div之一向左浮动,另一个向右浮动。我希望2个同级div始终处于相同的高度,但是对此存在问题。到目前为止,我只在Firefox中查看该页面,并认为在至少一个浏览器中运行它后,我会担心任何跨浏览器的问题。 这是标记: 这是CSS: 如果中的内容长于,则不会扩展为匹配。在我尝试了一个例子,说的Firefox的计算式的高度是,的计算式的高度是和的计算的风格高度为

  • 问题内容: 与传统的静态HTML相反,由于其动态生成的组件结构和事件模型,因此无法在React中使用该问题的典型解决方案: 脚本: 的HTML: 有一个NPM包,但看起来没有完成(只接受道具,,): https://www.npmjs.com/package/react- iframe 解决方案的可能部分是监听的事件,但以与React兼容的方式进行。 React中有没有一种方法可以将an 的高度设

  • 关于UITableViewCell高度动画,在堆栈溢出方面有很多类似的问题,但对于新的iOS8自动布局驱动的表视图,这些问题都不起作用。我的问题: 自定义单元格: 注意旋转木马高度限制。这是内容视图的子视图(唯一的子视图)的高度约束。 然后,在“查看我要展开的所有操作”单元上,我的代码: 如您所见,我尝试使用这个很好的旧解决方案: 您可以在选中UITableViewCell时设置高度更改的动画吗?