我的app / JFrame,使用Borderlayout,顶部或北部有一个工具栏,底部或南部有一个状态栏,中间有一个JPanel.JTabbedPane.JScrollPane.JTable。 JPanel总是一个固定的大小,可以使用各种组合应用的各种set * Size()方法进行粗略调整。但它始终是一个固定的大小,并始终有东西差距。北部和南部组件保持固定高度,并按照预期水平调整大小。
当然,这不是一种新的或独特的设计。
这是正常行为吗? 我错过了一些技巧吗?
答案 0 :(得分:3)
这是保留FlowLayout
的默认JPanel
并将面板添加到BorderLayout
的中心的特征。以下示例对具有FlowLayout
,默认或GridLayout
的面板进行了比较。相比之下,这两个被添加到GridLayout
,这允许以类似于BorderLayout
中心的方式进行扩展。
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
/** @see http://stackoverflow.com/questions/5822810 */
public class LayoutPanel extends JPanel {
public LayoutPanel(boolean useGrid) {
if (useGrid) {
this.setLayout(new GridLayout());
} // else default FlowLayout
this.add(new JTree());
}
private static void display() {
JFrame f = new JFrame("LayoutPanels");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(1, 0));
f.add(new LayoutPanel(false));
f.add(new LayoutPanel(true));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
display();
}
});
}
}