Я хочу, чтобы компонент занимал максимальную высоту контейнера. Например, в коде, который я вставил ниже, я сделал корневой фрейм 800 600. Я хочу установить высоту / ширину только этого кадра (и я не хочу пытаться пикселизировать его дочерние элементы). Если я запускаю это, я вижу плохо выровненный интерфейс.
Во-первых, я хочу, чтобы панель (которая находится внутри корневой рамки) занимала 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();
}
}