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