히트 맵을 생성하고, Jtable을 사용하여 숫자로 채운 다음 으로 히트 맵을 생성합니다. 색상 대신 동그라미 나 다른 그래픽 이미지 (크기가 상대적 일 수 있음) (예 : )를 표시하고 싶습니다. R에서 하나의 라이브러리 geom_tile을 찾았지만 Jav에서 수행 할 수있는 방법을 찾을 수 없었습니다. 너희들은 어떻게하는지에 대한 어떤 생각이나 예를 가지고 있니?자바에서 히트 맵을 그리는 방법, 색상 대신 원을 표시하는 방법
0
A
답변
1
사용자 정의 테이블 셀을 그리려면 TableCellRenderer
을 직접 구현해야합니다.
사용자 정의 TableCellRenderer는 이라는 하나의 메서드 만 구현해야하며 Component
또는 JComponent
을 반환해야합니다.
TableCellRenderer는 미리 설정된 셀 값에 따라 원을 그리는 사용자 정의 JComponent를 반환 할 수 있습니다. 에서
는 A 단일 셀 렌더링하는 구성 요소로 DotRenderer
를 사용하여 사용자 정의 HeatmapCellRenderer
, 설정을 보여주는 샘플 코드가 다음 위의 코드는 다음 스크린 샷과 같은 테이블을 생성한다
public class TableHeatmap {
public static void main(String[] args) {
JFrame frame = new JFrame();
// create a demo table 10 x 10 cells
JTable table = new JTable(10, 10);
frame.setContentPane(table);
// fill in some random data
for (int row = 0; row < 10; row++) {
for (int col = 0; col < 10; col++) {
table.setValueAt((int) (Math.random() * 10), row, col);
}
}
// set our custom TableCellRenderer
table.setDefaultRenderer(Object.class, new HeatmapCellRenderer());
table.setRowHeight(30);
// show the window
frame.pack();
frame.setVisible(true);
}
private static class HeatmapCellRenderer implements TableCellRenderer {
private final DotRenderer renderer = new DotRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Integer) {
this.renderer.setValue((Integer) value);
return this.renderer;
}
return null;
}
}
private static class DotRenderer extends JComponent {
private int value;
public void setValue(int value) {
this.value = value;
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.RED);
int centerX = this.getWidth()/2;
int centerY = this.getHeight()/2;
g.fillOval(centerX - this.value, centerY - this.value, this.value * 2, this.value * 2);
}
}
}
가 : 더 복잡한 것보다는 다만 오브젝트 당신의 세포에 대한 Integer
를 사용하여
, 당신은 더 복잡한 Rende의를 구현할 수 다시. 예를 들어, 간단한 데이터 클래스 class MyData { int value1; int value2; }
을 가지고 있고 그 값을 테이블에 삽입하는 경우 value1
에 따라 배경색을 설정하는 렌더러와 셀 값의 value2
을 기반으로하는 도트의 크기를 구현할 수 있습니다. 클래스에 value3
을 추가하면 이러한 값을 기반으로 도트를 색칠 할 수 있으므로 예제 이미지와 거의 유사합니다.
https://stackoverflow.com/questions/4941372/how-to-insert-image-into-jtable-cell – assylias