我的应用程序/JFrame 使用 Borderlayout,在顶部或北部有一个工具栏,在底部或南部有一个状态栏,在中心有一个 JPanel.JTabbedPane.JScrollPane.JTable 。 JPanel 始终是固定大小,可以使用以各种组合应用于各种组件的各种 set*Size() 方法进行粗略调整。但它的大小总是固定的,并且总是有东西向的间隙。南北组件保持固定高度并按照预期水平调整大小。
当然,这不是一个新的或独特的设计。
这是正常行为吗?
我错过了什么技巧吗?
这是保留默认的特点FlowLayout
of JPanel
并将面板添加到a的中心BorderLayout
。下面的示例比较了具有FlowLayout
,默认值,或GridLayout
。为了对比,将两者添加到GridLayout
,它允许以类似于BorderLayout
center.
![layout comparison image](https://i.stack.imgur.com/6av0r.png)
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();
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)