我想让一个组件占据容器的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/