当前位置: 首页 > 面试题库 >

Swing:如何将组件高度设置为容器的高度?

章侯林
2023-03-14
问题内容

我想使一个组件占据Container的maximumAvailableHeight。例如,在下面粘贴的代码中,我将根框架定为800,600。我只想设置该框架的高度/宽度(并且我不想尝试对其子像素进行像素化)。如果运行此命令,则会看到UI对齐不良。

首先,我希望面板(位于根框架内)占据框架的100%的高度(在这种情况下,为800px减去用于绘制框架标题的空间)。

其次,在面板内部,我有一个树和文本区域。我希望它们都采用100%的高度,让树采用30%的高度,让textArea采取70%的宽度(如果将树扩展到10个级别,那么使用ScrollPane可以了)。

了解这是最容易用HTML实现的。只需说高度=
100%,宽度为30%等,就可以完成了。有人知道这是否可以在Swing中完成吗?(我可以通过设置像素高度和布局管理器来实现,但是我正在寻找设置百分比高度和宽度的最干净的解决方案。)

package com.ekanathk.logger.gui;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;

public class TestFrame extends JFrame {
    public TestFrame() {
        super("Top Frame");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JTree env = getEnvironmentTree();
        env.expandRow(0);
        panel.add(new JScrollPane(env));
        panel.add(new JTextArea("Some contents"));
        getContentPane().add(panel);
        setSize(800, 600);
        SwingUtil.centerComponentOnScreen(this);
        setVisible(true);
    }

    private JTree getEnvironmentTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
        JTree tree = new JTree(root);
        DefaultMutableTreeNode one = new DefaultMutableTreeNode("One");
        root.add(one);
        one.add(new DefaultMutableTreeNode("under one.1"));
        one.add(new DefaultMutableTreeNode("under one.2"));
        root.add(new DefaultMutableTreeNode("two"));
        root.add(new DefaultMutableTreeNode("three"));
        return tree;
    }

    public static void main(String[] args) {
        new TestFrame();
    }
}

问题答案:

这使用GridBagLayout进行所需的操作。您可能会使用组件的setMinimumSize和setPreferedSize。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;

public class TestFrame extends JFrame {
    private static final long serialVersionUID = 1L;

    public TestFrame()  {
        super("Top Frame");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel(new GridBagLayout());

        JTree env = getEnvironmentTree();
        env.expandRow(0);

        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.BOTH;
        c.weightx=.7;
        c.weighty=1;

        c.gridx=0;
        c.gridy=0;
        c.gridheight=1;
        c.gridwidth=7;
        panel.add(new JScrollPane(env),c);

        c.weightx=.3;
        c.gridx=7;
        c.gridy=0;
        c.gridheight=1;
        c.gridwidth=GridBagConstraints.REMAINDER;
        panel.add(new JTextArea("Some contents"),c);

        add(panel);
        setSize(800, 600);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private JTree getEnvironmentTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
        JTree tree = new JTree(root);
        DefaultMutableTreeNode one = new DefaultMutableTreeNode("One");
        root.add(one);
        one.add(new DefaultMutableTreeNode("under one.1"));
        one.add(new DefaultMutableTreeNode("under one.2"));
        root.add(new DefaultMutableTreeNode("two"));
        root.add(new DefaultMutableTreeNode("three"));
        return tree;
    }

    public static void main(String[] args) {
        new TestFrame();
    }
}


 类似资料:
  • 有没有一种方法,只使用CSS,将图像的高度设置为其容器的高度,同时保持纵横比,允许宽度溢出和隐藏?这听起来有很多要求,但肯定有办法。我的意思是,我希望显示图像的完整高度,但如果宽度比容器允许的宽度宽(使用引导网格系统),那么只需溢出:隐藏。我将高度设置为100%,看起来很好,但图片从侧面挤压,以适合容器内,而不是溢出和被裁剪。通过将宽度设置为100%,它将填充容器。我认为这是使用容器作为标准的10

  • 我不使用GUI编辑器手动创建布局,我需要将高度设置为“自动”,以便用户可以看到整个表单。我将GridLayout包装到FlowLayout中,这样输入就不会被拉伸。创建这样的布局的最佳实践是什么。是否有人可以修改它,使整个表单可见或使用GridLayout,但可以设置表单中输入的宽度和高度? 未使用包装方法设置首选尺寸 使用包装方法设置首选尺寸 将扩展状态设置为最大化,但更新按钮不完全可见。如何设

  • 我正在为我的项目使用 iTextPDF 免费标记。基本上,我使用免费标记加载并填充一个HTML模板,然后使用iTextPDF的将其呈现为PDF。 模板是: 这是我的代码: 这段代码运行良好,但是固定高度是一个问题。 即假设: 生成的文档是: 相反,如果我用 生成的文档是: 如你所见,在最后一份文件中,我有两页。我希望只有一个页面,它根据内容的高度改变其高度。 iText有可能实现这样的事情吗?

  • 问题内容: 我一直在绞尽脑汁使用以下命令在CSS中创建垂直对齐方式 尽管这似乎适用于这种情况,但令我感到惊讶的是,当我增加或减小基本div的宽度时,垂直对齐方式会对齐。我期望当我设置padding- top属性时,会将填充值作为父容器高度的百分比(在我们的示例中为基数),但是上述50%的值是按宽度。:( 有没有一种方法可以将填充和/或边距设置为高度的百分比,而无需使用JavaScript? 问题答

  • 我使用的是设置我的容器,但我想知道是否有办法调整上面的行,以便将我的放在底部? 我正在努力与TBS合作

  • 我希望graph div的高度能够一直延伸到其父(graph容器)容器的末端,但不能超过它。我已经尝试将图形的高度设置为100%和inherit,但这两种设置都会导致图形延伸到父容器的底部边缘(我不想使用overflow:hidden)。有没有办法在图形上设置height属性,使其自动将其高度设置为正确的值? 当前代码: