GridBagLayout中最轻的间隔器组件

问题描述:

在GridBagLayout中,什么组件最适合在面板中提供空白空间?理想的情况是我想用具有分量:GridBagLayout中最轻的间隔器组件

  1. 低开销
  2. 时不需要空的空间没有副作用(即无最小尺寸)
  3. 一个平凡的构造函数(无参数)

JPanel违反上述#2。一个Box需要一个构造函数参数(上面的#3),在这种简单的情况下这真的不是必需的。 JLabel工作的很好,但我担心它可能会有一些开销,但承认它可能很低。

一个匿名类似乎也很好(即“新的JComponent(){}”),但每次使用它时都会添加一个额外的.class文件。我想这不会比任何给定的事件处理程序更高的开销。是否值得为此创建一个从JComponent派生的自定义零实现组件?是否存在我缺少的现有组件?

仅供参考GridBagLayout是我对我所属团队的一个约束,所以其他布局不是一种选择。

+0

我也尝试从组件(而不是JComponent的)派生的匿名类,这似乎工作也很好。我担心一些将AWT组件放在Swing GUI中的可能的兼容性问题(例如缺乏双缓冲),但它看起来好像是一个非常轻量级的解决方案。 – dcstraw 2009-06-01 15:43:38

+0

组件应该没问题。画布不会因为它会创建一个重量级的同伴,尽管我相信最近在这个领域有一些改进的工作。 – 2009-06-01 15:48:02

您提到Box,但它可以通过以下四种简单返回组件的静态方法以“轻量级”方式使用。我一直使用这些。它们在绘画方面是看不见的。就你而言,它看起来像粘胶是要走的路。一个简单的构造函数(就像这是一件坏事!),开销很低。无需空间时的副作用取决于您如何布置网格包。

panel.add(Box.createHorizontalGlue()); 
panel.add(Box.createVerticalGlue()); 
panel.add(Box.createHorizontalStrut(int width)); 
panel.add(Box.createVerticalStrut(int width)); 

JavaDoc的位置:http://java.sun.com/javase/6/docs/api/javax/swing/Box.html