Ich möchte eine Komponente erstellen, die die maximal verfügbare Höhe des Containers einnimmt. In dem Code, den ich zum Beispiel unten eingefügt habe, habe ich den Root-Rahmen auf 800.600 gesetzt. Ich möchte die Höhe/Breite nur für diesen Rahmen festlegen (und ich möchte nicht versuchen, seine Kinder zu verpixeln). Wenn ich dies ausführen, sehe ich eine schlecht ausgerichtete UI.
Erstens möchte ich, dass ein Panel (das sich innerhalb des Root-Rahmens befindet) die 100%ige Höhe des Rahmens einnimmt (in diesem Fall 800px abzüglich des kleinen Platzes, der für das Malen des Rahmentitels benötigt wird).
Zweitens habe ich innerhalb des Panels einen Baum und einen Textbereich. Ich möchte beide 100% Höhe zu nehmen und lassen Sie den Baum nehmen 30% und textArea nehmen 70% Breite (wenn der Baum auf 10 Ebenen erweitert wird, dann bin ich ok mit ScrollPane).
Es ist klar, dass dies am einfachsten in HTML zu erreichen ist. Sagen Sie einfach height=100% und width to be 30% etc und wir sind fertig. Weiß jemand, ob dies auch in Swing möglich ist? (Ich kann dies erreichen, indem ich Pixelhöhen und Layout-Manager einstelle, aber ich suche nach der saubersten Lösung, um prozentuale Höhen und Breiten festzulegen).
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();
}
}