我需要为研究项目显示基本图形元素。这些元素将显示为网格(例如128 X 128个正方形,每个正方形包含不同的元素)。
应用程序的显示部分是次要的逻辑,所以我正在寻找显示这种网格的最简单方法(使用Swing时)。到目前为止我已经考虑过JTable,但看起来很笨拙。我会喜欢使用基于网络的东西,但这不适合应用程序。
在基本的Java / Swing中是否有用于此类绘图的库或更好的组件?
答案 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了解更多详情。