【问题标题】:Best way to display a grid?显示网格的最佳方式?
【发布时间】:2014-01-06 00:39:40
【问题描述】:

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

应用程序的显示部分次要于其背后的逻辑,因此我正在寻找显示此类网格的最简单方法(使用 Swing 时)。到目前为止,我已经考虑过 JTable,但看起来很笨重。我本来希望使用基于 Web 的东西,但这不适合应用程序。

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

【问题讨论】:

  • 请解释您为什么考虑基于JTable 的实现“clunky”。
  • 我可能没有这么认为,但感觉 JTable 并没有提供我想要的灵活性。我希望能够通过坐标轻松访问网格上的元素,只重绘那个特定的单元格,我认为我必须将逻辑移动到渲染代码中(或使用包装器)。总而言之,我试图弄清楚 JTable 实现从长远来看是否会导致更少的头痛,而不是像偏移布局这样的东西
  • 嗯,还有GridLayout,不过和@PM77-1一样,我首先想到的是JTable。
  • JTable 检查列表 - “我希望能够通过坐标轻松访问网格上的元素” - 检查,可以通过 x/y 和鼠标点进行转换。 “只重绘那个特定的单元格,我认为我必须将逻辑移动到呈现代码中(或使用包装器)。” - 检查,可以。它可能“看起来”更难,但它是您将使用的核心和常见组件之一,非常值得花时间学习。查看How to use tables了解更多详情...

标签: java swing graphics grid


【解决方案1】:

我需要展示一个研究项目的基本图形元素。这些 元素将显示为网格(例如 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 中,有许多“事件”方法可用于生成事件,告诉表格模型的某些部分已更改。

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

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

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

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

一般来说,JTable 是一个复杂的 API,但复杂性来自于它内置的灵活性。你用得越多,你就会发现它的用途越多……

请仔细查看How to use tables 了解更多详情。

【讨论】:

  • 优秀而详细的答案。感谢您抽出宝贵的时间!就是 JTable。
  • JTable 是非常强大的 API,值得花时间学习,即使它最终不能满足您的要求,也值得花时间;)
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2010-09-21
  • 2012-11-17
  • 1970-01-01
相关资源
最近更新 更多