我有一个相当复杂的JTable子类(WidgetTable
和它的WidgetTableModel
),当我将它添加到一个虚拟JPanel用于测试时,它工作得很好。
因为我绝对讨厌使用LayoutManagers,我喜欢使用NetBeans内置的GUI Builder来完成我所有的布局工作。然后我通常只编写自动生成(GUI构建器)代码,这对我来说一直很有效。这是两全其美的:我得到了我想要的演示文稿,而且我还得到了对组件的细粒度控制。
然而,我从来没有使用GUI Builder工具制作表。在昨晚对它进行了一段时间的修改之后,它看起来似乎只适合制作非常基本的JTables(固定的#行数,固定的#列数等)。
我的WidgetTable
实际上有动态数量的行和列,特殊编辑器/渲染器和许多其他铃铛和口哨。
我的问题:
我有两个相互冲突的约束:(1)我需要使用GUI构建器来精确地定位和大小表在容器中的位置,但是,(2)通过GUI构建器可用的表组件太基本,无法处理我的WidgetTable
。
我需要一种方法来设计一个"表占位符"到我的容器与GUI构建器,这样,一旦NetBeans自动生成占位符代码,我调整代码,并指示它动态实例化我的一个WidgetTables
代替,消耗的位置和大小,我定义的占位符组件占用。
这样我可以有我的蛋糕,并吃它。唯一的问题是,我认为GUI构建器不支持这种拖放抽象JComponents
,定位和大小它们,然后在代码库的其他地方插入子类的能力。
有谁遇到过这个问题或者有什么有趣的建议吗?我想对我来说,最好的办法就是卷起袖子学习LayoutManagers,但我主要是一名服务器端开发人员,很少有机会到客户端来;老实说,我没有精力去学习GroupLayout及其邪恶的表亲的复杂和肮脏。
谢谢你的帮助!
使用GUI构建器插入JTable,将其模型属性重置为默认值,并调整构造代码,使其看起来像
jTable1 = new WidgetTable(this.widgetTableModel);
您可以通过右键单击JTable来调整创建代码,选择"Customize code",在第一个组合框中选择"custom creation"而不是"default code",并键入构造函数调用的代码。
如果您需要jTable1变量的类型为WidgetTable
而不是JTable
,请在同一对话框中编辑"变量声明代码"
NetBeans还允许您创建用于构建ui的自定义组件。这可能比您想在WidgetTable中投入的工作要多,但是如果您认为您将不得不使用自定义组件构建更多的ui,那么它可能值得学习。
我一直这样做。我有一个子类的JTable,我使用的GUI编辑器,它是动态的。
- 使用GUI编辑器和您选择的布局向您的项目添加JTable。
- 添加表格后,右键单击它并单击自定义代码。
- 在JTable的构造函数中,将其改为
new WidgetTable(new WidgetModel())
而不是new JTable(new DefaultTableModel())
。 - 为您的widget表创建一个全局变量。比如
private WidgetTable widgetTable;
在构造函数中,在调用initComponents()之后,将JTable转换为一个Widget表,并从此使用它。' widgetTable = (widgetTable)jTable1;