所以我想写一个矩阵浏览器,使我能够重新排列矩阵的行和列。 对于这个porpouse,我使用了Jtable类。现在我遇到的问题是通过查看double值来重新排列矩阵非常困难,所以我想打印矩阵不是用double值,而是用圆圈半径代表值的圆圈打印。这样我就可以更快地分辨大值和小值之间的区别。如何在java中的二维矩阵中表示double值
任何人都有任何想法如何我可以将这个双重值变成实心圆与JTable或任何表类的事情?
所以我想写一个矩阵浏览器,使我能够重新排列矩阵的行和列。 对于这个porpouse,我使用了Jtable类。现在我遇到的问题是通过查看double值来重新排列矩阵非常困难,所以我想打印矩阵不是用double值,而是用圆圈半径代表值的圆圈打印。这样我就可以更快地分辨大值和小值之间的区别。如何在java中的二维矩阵中表示double值
任何人都有任何想法如何我可以将这个双重值变成实心圆与JTable或任何表类的事情?
下面是一个custom renderer的示例,该示例使用Icon
接口来执行绘图。这种方法可以更轻松地控制文本和图标的相对位置。请注意,渲染器基于区间[0, 1)
中归一化值的假设进行缩放;您可能想要查询您的数据模型的最小值和最大值。
class DecRenderer extends DefaultTableCellRenderer implements Icon {
private static final int SIZE = 32;
private static final int HALF = SIZE/2;
DecimalFormat df;
public DecRenderer(DecimalFormat df) {
this.df = df;
this.setIcon(this);
this.setHorizontalAlignment(JLabel.RIGHT);
this.setBackground(Color.lightGray);
}
@Override
protected void setValue(Object value) {
setText((value == null) ? "" : df.format(value));
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.blue);
double v = Double.valueOf(this.getText());
int d = (int)(v * SIZE);
int r = d/2;
g2d.fillOval(x + HALF - r, y + HALF - r, d, d);
}
@Override
public int getIconWidth() {
return SIZE;
}
@Override
public int getIconHeight() {
return SIZE;
}
}
你将不得不编写你的自定义Cell Renderer。
该组件将被用作橡皮图章;为每个单元调用paint
方法。
在paint方法中绘制圆;
g.fillOval(x - radius/2, y - radius/2, radius, radius);
将在(x,y)
绘制radius
与中心点的圆。
真正goooood,phaaa +1 – mKorbel 2011-07-13 20:36:42
单元格渲染器,无论是ListCellRenderer或的TableCellRenderer,他们都去了我的头,LOL :-),还是我帮我的头,当谈到对于这些主题,尽管随着我越来越多地搜索和阅读,看起来它们不会被抛在后面,当谈到Swing时。在许多方面,人们可以用它们做的奇妙的事情。我很久以前就看过这个例子,但对Swing来说,绘画对我来说是遥不可及的。现在将缓慢地运行所有示例,学习许多新事物:-) – 2012-08-19 15:54:43
@GagandeepBali:这种渲染器和编辑器是[_flyweight pattern_](http://en.wikipedia.org/wiki/Flyweight_pattern)的示例,我发现有帮助的基本概念。 – trashgod 2012-08-19 16:05:59