显示网格的最佳方式?

时间:2014-01-06 00:39:40

标签: java swing graphics grid

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

应用程序的显示部分是次要的逻辑,所以我正在寻找显示这种网格的最简单方法(使用Swing时)。到目前为止我已经考虑过JTable,但看起来很笨拙。我会喜欢使用基于网络的东西,但这不适合应用程序。

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

1 个答案:

答案 0 :(得分: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);
  

仅重绘该特定单元格

通常,这可以通过TableModel实现,AbstractTableModel应该通知表格表格的某些部分已更新并应重新绘制。

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

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

  

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

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

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

一般来说,{{1}}是一个复杂的API,但复杂性来自它的内置灵活性。你使用的越多,你会发现它的用途就越多......

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