如何在 Java 中创建自定义 GUI 组件? (需要开始提示)

Posted

技术标签:

【中文标题】如何在 Java 中创建自定义 GUI 组件? (需要开始提示)【英文标题】:How to create a custom GUI component in Java? (Need starting hints) 【发布时间】:2012-08-02 20:44:38 【问题描述】:

我想用 Java 创建一个自定义组件。 它就像一个文本区域,但它是由网格组成的,当你写的时候,每个字符都在一个网格单元格中。 我不知道从哪里开始。 我想象一个具有 value 属性的 Cell 类和一个具有 Cell 数组属性的 Sheet 类和一个在写入时指向当前单元格的指针。 我在编写这样的事情时没有太多问题。我最重要的是如何以图形方式向用户展示它。

有什么建议或参考吗?

编辑:我阅读了您出色的答案,但这并不是我想要的。当我说“由网格组成的文本区域,并且每个字符都进入网格单元格”时,这只是对我将要做的事情的简化。我会给你进一步的解释:

有一个文本区域。每行由两(或更多)行(上排和下排)组成。每行都包含单元格。在每个单元格中都有一个字符或不同的对象(由字符或图像或其他东西表示)。上排的字符绑定/跟随相应的下单元格。像这样。

_ _ _ _ _ _ _ _ _ _ _ _ _
_|_|_|_|_|_|X|_|_|_|_|_|_|
H|E|L|L|O|_|W|O|R|L|D|,|_|
_ _ _ _ _ _ _ _ _ _ _ _ _
_|_|_|_|Y|_|_|_|_|_|_|_|_|
H|O|W|_|A|R|E|_|Y|O|U|?|_|
_ _ _ _ _ _ _ _ _ _ _ _ _
_|_|_|_|_|_|_|_|_|_|_|_|_|
_|_|_|_|_|_|_|_|_|_|_|_|_|

您可以看到 X 绑定到 WORLD 的下部 W,而 Y 绑定到 ARE 的下部 A。我希望现在它更清楚一点:-p 构建、设计和编程此类自定义工具/组件/编辑器的正确方法是什么?

【问题讨论】:

Swing、AWT、SWT 还是其他?我们需要一些上下文。您还阅读过您使用的任何 GUI 库的教程吗? 我正在使用 swing 和 awt。我是一个真正的 java 初学者(但在编程方面不是那么初学者)。 我认为你最好的办法是首先通过阅读Swing tutorials 的大部分内容来学习你的工具集。 所以你的建议是适当使用一些摆动组件,而不是自己创建一个。我最初的想法是扩展一个 JPanel,然后在上面绘图,但我真的无法想象如何让用户在其中输入文本并显示它。 使用具有固定宽度的JTextArea Font 【参考方案1】:

创建一个自定义JTable 怎么样? Here你可以找到一些开始的信息。

【讨论】:

我们知道他还在使用 Swing 吗? 是的,我正在使用 swing。因为我要让一些单元格包含不同的对象(甚至是可拖动的对象),所以 JTable 对我来说不是最佳选择。我在第一篇文章中保持简单,但事实是这个自定义组件会更复杂。我之前告诉过的“文本区域”对我来说只是一个起点:-) @Thiezar:只要您的渲染器和编辑器设置正确,JTable 就可以处理不同的对象。 在这种情况下,我将在 JTables 上学习一些东西 :-) 同时,如果有人可以帮助我提供有关如何解决我的问题的更多信息,例如“我会走这条路”或有关我应该遵循的解决方案,将不胜感激:-) ...根据我的经验,JTable 不适合摇摆初学者(更不适合 Java 初学者)。但是,如果您要使用表格(如 Excel) - 它是唯一可用的内置选项。 ://【参考方案2】:

我找到了一个非常适合我的目的的解决方案: 我将像我在第一篇文章中解释的那样创建自定义 gui 组件的方法是扩展一个 JPanel 并实现一个 KeyboardListener(如果需要,还可以实现一个 MouseListener)。我也创建了一个 Row 类和一个 Pointer 类,我的主要组件类是由它们组成的。 根据我需要的图形,通过重载 JPanel 的paintComponent 方法来完成该图形。 显然,为了处理键盘和鼠标操作,您只需实现 KeyboardListener 和 MouseListener 方法(它们都是接口)。

如果有人感兴趣并要求进一步解释,我可以提供类图或其他东西。

【讨论】:

以上是关于如何在 Java 中创建自定义 GUI 组件? (需要开始提示)的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中创建自定义 JButton

在 Vue.js 中创建自定义组件

如何在Vue.js中创建自定义链接组件?

如何在使用“inRange”过滤器类型的 ag-grid 中创建自定义浮动过滤器组件

如何在reactjs挂钩中创建自定义挂钩?

在 android studio 中创建自定义小部件?