2014-01-06 58 views
0

我需要显示研究项目的基本图形元素。这些元素将显示为一个网格(例如128×128的正方形,每个正方形包含不同的元素)。显示网格的最佳方法?

该应用程序的显示部是继发于背后的逻辑,所以我正在寻找显示这样的栅格的最简单的方式(同时使用摇摆)。我认为JTable到目前为止,但似乎笨重。我本来希望使用基于Web的东西,但不适合应用程序。

在基本Java/Swing中是否有任何库或更好的组件用于绘图?

+0

请解释您为什么认为基于JTable的实现“* clunky *”。 –

+0

我可能没有想到它是正确的,但它感觉像JTable不提供我想要的灵活性。我希望能够通过坐标轻松访问网格上的元素,只重绘那个特定的单元格,我想我必须将逻辑移动到呈现代码中(或使用包装器)。总而言之,我试图弄清楚JTable的实现是否会在长期运行中导致更少的麻烦,而不是像偏移布局那样的问题。 – Eugen

+0

好吧,也有'GridLayout',但像@ PM77-1,我的第一个想法是'JTable'。 –

回答

2

我需要显示一个研究项目的基本图形元素。这些 元素将显示为一个网格(例如128 X 128个正方形,每个正方形包含不同元素的 )。

我可能会说对JTable的唯一工作是设计为每列都是相同的对象类型。

这并不意味着它是不可能的,但它需要与细胞渲染处理和更新个人价值更多的工作。

我希望能够轻松地访问坐标网格上的元素,

这取决于你的初始入口点。例如,如果你只有一个鼠标一点,你可以问表的行和列表示给定的点,例如...

Point p = mouseEvent.getPoint(); 
int row = table.rowAtPoint(p); 
int col = table.columnAtPoint(p); 

一旦你有,你可以简单地让细胞使用类似的表值...

Object cellValue = table.getValueAt(row, col); 

重绘只有特定的细胞

一般情况下,这可以通过实现,它应该通知表格表格的某些部分已更新并应重新绘制。

例如,在AbstractTableModel中,有许多“事件”方法可用于生成事件,以告诉表格模型的某些部分已更改。

例如,您可以使用public void fireTableCellUpdated(int row, int column)来告诉表格,指定的单元格已更改,表格将通过重新绘制给定的单元格对其作出反应。这通常由模型调用。

我想我必须将逻辑转换为渲染代码(或使用包装器)。

表API(实际上Swing中的许多高级组件)使用“渲染器”来允许程序定义应该如何显示组件中的某些元素。

看看Using custom renderers了解更多详情...

一般来说,JTable是一个复杂的API,但其复杂性来自它的灵活性。您使用的越多,使用它的用途就越多......

详细了解How to use tables了解更多详情。

+0

优秀和详细的答案。感谢您抽出宝贵的时间! JTable是。 – Eugen

+1

'JTable'是令人难以置信的强大API,值得花时间学习,即使它不能满足您的要求,也会花费时间;) – MadProgrammer

相关问题