gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:34:55 54 4
gpt4 key购买 nike

我想让一个组件占据容器的maximumAvailableHeight。例如,在我粘贴在下面的代码中,我将根帧设置为 800,600。我只想设置那个框架的高度/宽度(我不想尝试像素化它的 child )。如果我运行它,我会看到一个排列不当的 UI。

首先,我想要一个面板(位于根框架内)占据框架的 100% 高度(在本例中为 800px 减去绘制框架标题所需的小空间)。

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

了解这在 HTML 中最容易实现。只要说 height=100% 和 width 为 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();
}
}

关于java - Swing:如何将组件高度设置为容器的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686882/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com