所以我想寫一個矩陣瀏覽器,使我能夠重新排列矩陣的行和列。 對於這個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