3

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

由于我非常讨厌使用 LayoutManagers,因此我喜欢使用 NetBeans 内置的 GUI Builder 来完成我的所有布局工作。然后我通常只是围绕自动生成的(GUI builder)代码编写代码,这对我来说一直有效。这是两全其美的:我的演示文稿看起来完全符合我的要求,而且我还可以对组件进行细粒度的控制。

但是,我从未使用过 GUI Builder 工具来制作表格。在昨晚修补了一段时间之后,它看起来好像只适用于制作非常基本的(固定的行数,固定的列数等)JTables。

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

我的问题:

I have two conflicting constraints: (1) I need to use the GUI builder to position and size the table exactly where I want it in the container, but, (2) The table component available through the GUI builder is too basic to handle my WidgetTable.

I need a way to design a "table placeholder" into my container with the GUI builder, such that, once NetBeans autogenerates that placeholder code, I tweak the code and instruct it to dynamically instantiate one of my WidgetTables instead, consuming the location and size that I defined the placeholder component to take up.

This way I can have my cake, and eat it too. The only problem is, I don't think the GUI builder supports this ability to drag-n-drop abstract JComponents, position and size them, and then plug subclasses into them elsewhere in the codebase.

Anybody ever have this problem before or have any interesting recommendations? I imagine the best thing to do would be for me to just roll up my sleeves and learn LayoutManagers, but I'm mostly a server-side developer and only come over to the client-side every once in a blue moon; and honestly, don't have the energy to learn the intricacies and nastiness of GroupLayout and its sinister cousins.

Thanks for any help!

4

3 回答 3

3

使用 GUI 构建器插入 JTable,将其模型属性重置为默认值,并调整构造代码,使其看起来像

jTable1 = new WidgetTable(this.widgetTableModel);

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

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

于 2011-08-24T14:42:22.417 回答
1

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

于 2011-08-24T16:00:29.837 回答
0

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

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