【发布时间】:2009-03-26 17:57:18
【问题描述】:
我想让一个组件占据Container的maximumAvailableHeight。例如,在下面粘贴的代码中,我将根帧设置为 800,600。我只想设置该帧的高度/宽度(我不想尝试对其子项进行像素化)。如果我运行它,我会看到一个对齐错误的 UI。
首先,我想要一个面板(位于根框架内)占据框架的 100% 高度(在本例中为 800 像素减去绘制框架标题所需的小空间)。
其次,在面板内我有一个树和文本区域。我希望它们都占据 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();
}
}
【问题讨论】: