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

我想使一个组件占据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();

}

}

以上是 Swing:如何将组件高度设置为容器的高度? 的全部内容, 来源链接: utcz.com/qa/410640.html

回到顶部