2011-08-24 76 views
3

我有一个相当复杂的JTable子类(WidgetTable及其WidgetTableModel),当我将它添加到虚拟JPanel以进行测试时,它工作正常。Swing JTable Hack

由于我绝对是horrid与LayoutManagers一起工作时,我喜欢使用NetBeans内置GUI Builder来处理所有布局工作。然后,我通常只编写自动生成的(GUI生成器)代码,并且这一直对我有用。这是两全其美的:我的演示文稿看起来完全符合我的要求,而且我也对组件进行了细致的控制。

但是,我从来没有用过GUI Builder工具来制作表格。昨天晚上修改了一段时间后,它看起来好像只适合制作非常基本的(固定行数,固定列数等)JTables。

我的WidgetTable实际上有一个动态数量的行和列,特殊的编辑器/渲染器和许多其他的花里胡哨的。

我的问题:

我有两个相互矛盾的约束条件:(1)我需要使用GUI生成器的位置和大小的表格正是我希望它在容器中,;(2 )通过GUI构建器可用的表组件太基本,无法处理我的WidgetTable

我需要一种方法来设计一个“表占位符”到我了GUI builder的容器,这样,一旦NetBeans的自动生成了占位符码,我调整了代码,并指示它动态地实例我WidgetTables的一个替代,消费我定义占位符组件的位置和大小。

这样我可以吃我的蛋糕,也吃了它。唯一的问题是,我认为GUI构建器不支持这种拖放抽象的功能,定位和调整它们的大小,然后将子类插入代码库中的其他地方。

有没有人有过这个问题之前或有任何有趣的建议?我想最好做的事情是让我卷起袖子学习布局管理器,但我主要是服务器端开发人员,每过一次蓝月亮就会到客户端去;说实话,没有能力去学习GroupLayout及其邪恶表兄弟的错综复杂和混乱。

感谢您的帮助!

+2

好吧,真实世界的经验告诉我们,永远不可能吃一块蛋糕,同时保持蛋糕的准确实例。有时候,看起来我们可以浮于这个事实上,但这是一种错觉,可能是由一些肮脏的黑魔法造成的:-) – kleopatra

回答

3

使用GUI构建器插入一个JTable,它的模型属性重置为默认值,并调整施工代码,以便它看起来像

jTable1 = new WidgetTable(this.widgetTableModel); 

您可以在右键单击调整创造码JTable,选择“自定义代码”,在第一个组合框中选择“自定义创建”而不是“默认代码”,然后键入构造函数调用的代码。

如果您需要将jTable1变量的类型设置为WidgetTable而不是JTable,请在同一个对话框中编辑“变量声明代码”。

1

NetBeans还允许您为构建UI创建自定义组件。这可能比您想要放入WidgetTable更多的工作,但如果您认为您将不得不使用自定义组件构建更多UI,则可能值得学习。

0

我一直这样做。我有一个使用GUI编辑器的子类JTable,它是Dynamic。

  1. 使用GUI编辑器和您选择的布局将JTable添加到您的项目。
  2. 添加表格后,右键点击它并点击自定义代码。
  3. 在JTable的构造函数中,将其更改为new WidgetTable(new WidgetModel())而不是new JTable(new DefaultTableModel())
  4. 为您创建一个全局变量WidgetTable。类似于private WidgetTable widgetTable;
  5. 在您的构造函数中,在调用initComponents()之后,将您的JTable强制转换为Widget表并从现在开始使用它。 `widgetTable =(WidgetTable)jTable1;