Loading GUI/src/main/java/cz/fidentis/analyst/gui/task/batch/distanceheatmap/ColorScalePanel.java→GUI/src/main/java/cz/fidentis/analyst/gui/elements/colorscalepanel/ColorScalePanel.java +12 −9 Original line number Diff line number Diff line package cz.fidentis.analyst.gui.task.batch.distanceheatmap; package cz.fidentis.analyst.gui.elements.colorscalepanel; import javax.swing.*; import java.awt.*; Loading @@ -12,11 +12,7 @@ public class ColorScalePanel extends JPanel { private final BufferedImage colorScaleImage; private static final double MIN = 0.0; private static double MAX; public ColorScalePanel(int width, int height, double maxHue) { MAX = maxHue; public ColorScalePanel(int width, int height) { colorScaleImage = createColorScaleImage(width, height); setPreferredSize(new Dimension(width, height)); } Loading @@ -32,8 +28,7 @@ public class ColorScalePanel extends JPanel { WritableRaster raster = image.getRaster(); for (int pixelRow = 0; pixelRow < height; pixelRow++) { //TODO - make note about the weird number double value = ((1 - MAX) / height) * pixelRow + 0.561; double value = (double) pixelRow / height; Color color = getColorForValue(value); for (int pixelColumn = 0; pixelColumn < width; pixelColumn++) { Loading @@ -50,6 +45,14 @@ public class ColorScalePanel extends JPanel { } private Color getColorForValue(double value) { return Color.getHSBColor((float) value, 1.0f, 1.0f); float progress = (float) value; // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light // Calculates saturation from 0.1 up to 1.0 float saturation = 0.1f + progress * 0.9f; // Calculates brightness from 1.0 down to 0.5 float brightness = 1.0f - progress * 0.5f; return Color.getHSBColor(0.61f, saturation, brightness); } } No newline at end of file GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/Heatmap.java +54 −46 Original line number Diff line number Diff line Loading @@ -21,9 +21,8 @@ public class Heatmap { private final FacesProxy faces; private final JScrollPane scrollPane; private final Map<String, TableColumn> deletedColumns = new HashMap<>(); JTable table; DefaultTableModel defaultTableModel; private final JTable table; private final DefaultTableModel defaultTableModel; private double[][] distances; private Double biggestDistance; Loading @@ -34,7 +33,6 @@ public class Heatmap { private final Color whiteColor = Color.white; private final double scalePercentage = 0.5; private final int additionalColumn = 1; private final int additionalRow = 1; private final int doubleClick = 2; Loading @@ -48,10 +46,10 @@ public class Heatmap { * @param panelHeight height of the panel for the heatmap table * @param panelWidth width of the panel for the heatmap table */ public Heatmap(FacesProxy faces, int panelHeight, int panelWidth) { public Heatmap(FacesProxy faces, double panelHeight, double panelWidth) { this.faces = faces; this.panelHeight = panelHeight; this.panelWidth = panelWidth; this.panelHeight = (int) panelHeight; this.panelWidth = (int) panelWidth; this.table = new JTable(); this.defaultTableModel = setTableModel(); Loading Loading @@ -101,20 +99,15 @@ public class Heatmap { int heatmapHeight = cellSize * (table.getRowCount() + additionalRow) + additionalBorderPixels; int heatmapWidth = cellSize * (table.getColumnCount() + additionalColumn) + additionalBorderPixels; int sliderWidth = scrollPane.getVerticalScrollBar().getWidth(); int heatmapSliderWidth = heatmapWidth + sliderWidth; if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth < panelWidth) { if (heatmapHeight < panelHeight && heatmapSliderWidth < panelWidth) { scrollPane.setSize(heatmapWidth, heatmapHeight); } else if (heatmapHeight >= panelHeight && heatmapWidth + sliderWidth < panelWidth) { scrollPane.setSize(heatmapWidth + sliderWidth, panelHeight); } else if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth >= panelWidth) { } else if (heatmapHeight < panelHeight) { scrollPane.setSize(panelWidth, heatmapHeight + sliderWidth); } else { scrollPane.setSize(panelWidth, panelHeight); } } else scrollPane.setSize(Math.min(heatmapSliderWidth, panelWidth), panelHeight); } //TODO - remove the highlighting of the header private JTableHeader createTableHeader() { return new JTableHeader(table.getColumnModel()) { @Override Loading Loading @@ -161,15 +154,12 @@ public class Heatmap { } } //TODO - refactoring /** * Initialise the table to default settings as after loading the data */ public void initializeTable(boolean createRowHeader) { setRowColumnCount(); setTableSize(); setTableHeaderSize(); if (createRowHeader) { Loading @@ -179,9 +169,8 @@ public class Heatmap { setHeaderText(); setHeadersToVisible(); rowHeader.setRowHeaderWidth(cellSize); rowHeader.setRowHeaderHeight(cellSize); setRowHeaderHeight(); setRowHeaderWidth(); setCellHeight(); setCellWidth(); } Loading @@ -201,6 +190,14 @@ public class Heatmap { defaultTableModel.setColumnIdentifiers(facesNames); } private void setRowHeaderHeight() { rowHeader.setRowHeaderWidth(cellSize); } private void setRowHeaderWidth() { rowHeader.setRowHeaderHeight(cellSize); } private void setCellHeight() { table.setRowHeight(cellSize); } Loading @@ -224,7 +221,7 @@ public class Heatmap { } private void createMouseColumnHandler() { MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table, defaultTableModel); MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table); table.getTableHeader().addMouseListener(mouseColumnHandler); table.getTableHeader().addMouseMotionListener(mouseColumnHandler); } Loading Loading @@ -255,8 +252,6 @@ public class Heatmap { this.biggestDistance = maxDistance; } //TODO - refactoring /** * Sets the colors to cells while generating the values and after every change to the heatmap */ Loading @@ -265,28 +260,31 @@ public class Heatmap { table.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { double cellValue; if (value != null) { String numericString = String.valueOf(value).replace(",", "."); cellValue = Double.parseDouble(numericString); } else { cellValue = Double.parseDouble("0"); } double cellValue = value != null ? Double.parseDouble(value.toString()) : Double.parseDouble("0"); final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); float hue = (float) ((1 - cellValue / (biggestDistance)) * scalePercentage + 0.561); Color color = Color.getHSBColor(hue, 0.85f, 0.85f); Color color = getColor(cellValue); c.setBackground(color); c.setForeground(color); return c; } }); } } private Color getColor(double cellValue) { float progress = (float) (cellValue / biggestDistance); // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light // Calculates brightness from 0.5 up to 1.0 float brightness = 0.5f + progress * 0.5f; // Calculates saturation from 1.0 down to 0.1 float saturation = Math.max(0.1f, 1.0f - Math.max(0, progress - 0.5f) * 1.8f); //todo return Color.getHSBColor(0.61f, saturation, brightness); } private Object[] getDistancesOfRow(String returningRow) { Object[] rowsDistances = new Object[distances.length + additionalRow]; Loading Loading @@ -384,23 +382,24 @@ public class Heatmap { return scrollPane; } //TODO - header /** * Removes clicked column, adds it to a list of removed rows/columns and resets the table size * @param columnModel heatmap column model * @param removedColumn clicked colum for removal */ public void removeColumn(TableColumnModel columnModel, TableColumn removedColumn) { deletedColumns.put(removedColumn.getHeaderValue().toString(), removedColumn); columnModel.removeColumn(removedColumn); setTableSize(); } //TODO - header //TODO - refactoring //TODO - try to create hiddenRows /** * Removes clicked row, adds it to a list of removed rows/columns and resets the table size * @param removedRow clicked row for removal */ public void removeRow(int removedRow) { defaultTableModel.removeRow(removedRow); setTableSize(); table.getTableHeader().revalidate(); table.getTableHeader().repaint(); } /** Loading @@ -421,6 +420,15 @@ public class Heatmap { scrollPane.setVisible(true); } /** * Sets heatmap table visible */ public void setHeatmapVisibleIfNonVisible() { if (!isHeatmapVisible()) { setHeatmapVisible(); } } /** * Sets heatmap table not visible */ Loading GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseColumnHandler.java +11 −11 Original line number Diff line number Diff line package cz.fidentis.analyst.gui.elements.heatmaptable; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.lang.ref.WeakReference; /** * Handler for moving columns in the heatmap * * @author Sabrina Oralkova */ public class MouseColumnHandler implements MouseListener, MouseMotionListener { private Integer column = null; private Integer column; private final WeakReference<JTable> table; private final WeakReference<DefaultTableModel> tableModel; public MouseColumnHandler(JTable table, DefaultTableModel model) { public MouseColumnHandler(JTable table) { this.table = new WeakReference<>(table); this.tableModel = new WeakReference<>(model); } @Override Loading @@ -28,8 +25,8 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mousePressed(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } column = table.columnAtPoint(event.getPoint()); Loading @@ -48,14 +45,14 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mouseDragged(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } int viewColumnIndex = table.columnAtPoint(event.getPoint()); if(column == null || viewColumnIndex == column || viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount()) { if(column == null || viewColumnIndex == column || isIndexOutOfRange(viewColumnIndex, table)) { return; } Loading @@ -67,4 +64,7 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mouseMoved(MouseEvent event) {} private boolean isIndexOutOfRange(int viewColumnIndex, JTable table) { return viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount(); } } GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseHandler.java→GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseRowHandler.java +14 −10 Original line number Diff line number Diff line Loading @@ -8,17 +8,17 @@ import java.awt.event.MouseMotionListener; import java.lang.ref.WeakReference; /** * Handler for moving rows in the heatmap * * @author Sabrina Oralkova */ public class MouseHandler implements MouseListener, MouseMotionListener { private Integer row = null; public class MouseRowHandler implements MouseListener, MouseMotionListener { private Integer row; private final WeakReference<JTable> table; private final WeakReference<DefaultTableModel> tableModel; public MouseHandler(JTable table, DefaultTableModel model) { public MouseRowHandler(JTable table, DefaultTableModel model) { this.table = new WeakReference<>(table); this.tableModel = new WeakReference<>(model); } Loading @@ -28,8 +28,8 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mousePressed(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } int viewRowIndex = table.rowAtPoint(event.getPoint()); Loading @@ -49,16 +49,17 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mouseDragged(MouseEvent event) { JTable table; DefaultTableModel tableModel; if((table = this.table.get()) == null || (tableModel = this.tableModel.get()) == null) { JTable table = this.table.get(); DefaultTableModel tableModel = this.tableModel.get(); if(table == null || tableModel == null) { return; } int viewRowIndex = table.rowAtPoint(event.getPoint()); int currentRow = table.convertRowIndexToModel(viewRowIndex); if(row == null || currentRow == row || currentRow < 0 || currentRow >= table.getRowCount()) { if(row == null || currentRow == row || isIndexOutOfRange(currentRow, table)) { return; } Loading @@ -70,4 +71,7 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mouseMoved(MouseEvent event) {} private boolean isIndexOutOfRange(int currentRow, JTable table) { return currentRow < 0 || currentRow >= table.getRowCount(); } } GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/RowHeader.java +36 −36 Original line number Diff line number Diff line Loading @@ -38,42 +38,6 @@ public class RowHeader { rowHeader.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) { return new JTable(defaultTableModel, createRowHeaderModel()) { public String getToolTipText(MouseEvent e) { return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString(); } }; } private TableColumnModel createRowHeaderModel() { return new DefaultTableColumnModel() { boolean first = true; public void addColumn(TableColumn tc) { if (first) { super.addColumn(tc); tc.setHeaderValue(""); first = false; } } }; } private void createMouseRowHandler(DefaultTableModel defaultTableModel) { MouseHandler mouseHandler = new MouseHandler(rowHeader, defaultTableModel); rowHeader.addMouseListener(mouseHandler); rowHeader.addMouseMotionListener(mouseHandler); } private void createJViewport(JScrollPane scrollPane) { rowHeaderView = new JViewport(); rowHeaderView.setView(rowHeader); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); scrollPane.setRowHeaderView(rowHeaderView); } /** * Gets the row header for a table * Loading Loading @@ -112,4 +76,40 @@ public class RowHeader { rowHeader.getColumnModel().getColumn(0).setPreferredWidth(cellSize); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); } private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) { return new JTable(defaultTableModel, createRowHeaderModel()) { public String getToolTipText(MouseEvent e) { return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString(); } }; } private TableColumnModel createRowHeaderModel() { return new DefaultTableColumnModel() { boolean first = true; public void addColumn(TableColumn tc) { if (first) { super.addColumn(tc); tc.setHeaderValue(""); first = false; } } }; } private void createMouseRowHandler(DefaultTableModel defaultTableModel) { MouseRowHandler mouseRowHandler = new MouseRowHandler(rowHeader, defaultTableModel); rowHeader.addMouseListener(mouseRowHandler); rowHeader.addMouseMotionListener(mouseRowHandler); } private void createJViewport(JScrollPane scrollPane) { rowHeaderView = new JViewport(); rowHeaderView.setView(rowHeader); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); scrollPane.setRowHeaderView(rowHeaderView); } } Loading
GUI/src/main/java/cz/fidentis/analyst/gui/task/batch/distanceheatmap/ColorScalePanel.java→GUI/src/main/java/cz/fidentis/analyst/gui/elements/colorscalepanel/ColorScalePanel.java +12 −9 Original line number Diff line number Diff line package cz.fidentis.analyst.gui.task.batch.distanceheatmap; package cz.fidentis.analyst.gui.elements.colorscalepanel; import javax.swing.*; import java.awt.*; Loading @@ -12,11 +12,7 @@ public class ColorScalePanel extends JPanel { private final BufferedImage colorScaleImage; private static final double MIN = 0.0; private static double MAX; public ColorScalePanel(int width, int height, double maxHue) { MAX = maxHue; public ColorScalePanel(int width, int height) { colorScaleImage = createColorScaleImage(width, height); setPreferredSize(new Dimension(width, height)); } Loading @@ -32,8 +28,7 @@ public class ColorScalePanel extends JPanel { WritableRaster raster = image.getRaster(); for (int pixelRow = 0; pixelRow < height; pixelRow++) { //TODO - make note about the weird number double value = ((1 - MAX) / height) * pixelRow + 0.561; double value = (double) pixelRow / height; Color color = getColorForValue(value); for (int pixelColumn = 0; pixelColumn < width; pixelColumn++) { Loading @@ -50,6 +45,14 @@ public class ColorScalePanel extends JPanel { } private Color getColorForValue(double value) { return Color.getHSBColor((float) value, 1.0f, 1.0f); float progress = (float) value; // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light // Calculates saturation from 0.1 up to 1.0 float saturation = 0.1f + progress * 0.9f; // Calculates brightness from 1.0 down to 0.5 float brightness = 1.0f - progress * 0.5f; return Color.getHSBColor(0.61f, saturation, brightness); } } No newline at end of file
GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/Heatmap.java +54 −46 Original line number Diff line number Diff line Loading @@ -21,9 +21,8 @@ public class Heatmap { private final FacesProxy faces; private final JScrollPane scrollPane; private final Map<String, TableColumn> deletedColumns = new HashMap<>(); JTable table; DefaultTableModel defaultTableModel; private final JTable table; private final DefaultTableModel defaultTableModel; private double[][] distances; private Double biggestDistance; Loading @@ -34,7 +33,6 @@ public class Heatmap { private final Color whiteColor = Color.white; private final double scalePercentage = 0.5; private final int additionalColumn = 1; private final int additionalRow = 1; private final int doubleClick = 2; Loading @@ -48,10 +46,10 @@ public class Heatmap { * @param panelHeight height of the panel for the heatmap table * @param panelWidth width of the panel for the heatmap table */ public Heatmap(FacesProxy faces, int panelHeight, int panelWidth) { public Heatmap(FacesProxy faces, double panelHeight, double panelWidth) { this.faces = faces; this.panelHeight = panelHeight; this.panelWidth = panelWidth; this.panelHeight = (int) panelHeight; this.panelWidth = (int) panelWidth; this.table = new JTable(); this.defaultTableModel = setTableModel(); Loading Loading @@ -101,20 +99,15 @@ public class Heatmap { int heatmapHeight = cellSize * (table.getRowCount() + additionalRow) + additionalBorderPixels; int heatmapWidth = cellSize * (table.getColumnCount() + additionalColumn) + additionalBorderPixels; int sliderWidth = scrollPane.getVerticalScrollBar().getWidth(); int heatmapSliderWidth = heatmapWidth + sliderWidth; if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth < panelWidth) { if (heatmapHeight < panelHeight && heatmapSliderWidth < panelWidth) { scrollPane.setSize(heatmapWidth, heatmapHeight); } else if (heatmapHeight >= panelHeight && heatmapWidth + sliderWidth < panelWidth) { scrollPane.setSize(heatmapWidth + sliderWidth, panelHeight); } else if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth >= panelWidth) { } else if (heatmapHeight < panelHeight) { scrollPane.setSize(panelWidth, heatmapHeight + sliderWidth); } else { scrollPane.setSize(panelWidth, panelHeight); } } else scrollPane.setSize(Math.min(heatmapSliderWidth, panelWidth), panelHeight); } //TODO - remove the highlighting of the header private JTableHeader createTableHeader() { return new JTableHeader(table.getColumnModel()) { @Override Loading Loading @@ -161,15 +154,12 @@ public class Heatmap { } } //TODO - refactoring /** * Initialise the table to default settings as after loading the data */ public void initializeTable(boolean createRowHeader) { setRowColumnCount(); setTableSize(); setTableHeaderSize(); if (createRowHeader) { Loading @@ -179,9 +169,8 @@ public class Heatmap { setHeaderText(); setHeadersToVisible(); rowHeader.setRowHeaderWidth(cellSize); rowHeader.setRowHeaderHeight(cellSize); setRowHeaderHeight(); setRowHeaderWidth(); setCellHeight(); setCellWidth(); } Loading @@ -201,6 +190,14 @@ public class Heatmap { defaultTableModel.setColumnIdentifiers(facesNames); } private void setRowHeaderHeight() { rowHeader.setRowHeaderWidth(cellSize); } private void setRowHeaderWidth() { rowHeader.setRowHeaderHeight(cellSize); } private void setCellHeight() { table.setRowHeight(cellSize); } Loading @@ -224,7 +221,7 @@ public class Heatmap { } private void createMouseColumnHandler() { MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table, defaultTableModel); MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table); table.getTableHeader().addMouseListener(mouseColumnHandler); table.getTableHeader().addMouseMotionListener(mouseColumnHandler); } Loading Loading @@ -255,8 +252,6 @@ public class Heatmap { this.biggestDistance = maxDistance; } //TODO - refactoring /** * Sets the colors to cells while generating the values and after every change to the heatmap */ Loading @@ -265,28 +260,31 @@ public class Heatmap { table.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { double cellValue; if (value != null) { String numericString = String.valueOf(value).replace(",", "."); cellValue = Double.parseDouble(numericString); } else { cellValue = Double.parseDouble("0"); } double cellValue = value != null ? Double.parseDouble(value.toString()) : Double.parseDouble("0"); final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); float hue = (float) ((1 - cellValue / (biggestDistance)) * scalePercentage + 0.561); Color color = Color.getHSBColor(hue, 0.85f, 0.85f); Color color = getColor(cellValue); c.setBackground(color); c.setForeground(color); return c; } }); } } private Color getColor(double cellValue) { float progress = (float) (cellValue / biggestDistance); // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light // Calculates brightness from 0.5 up to 1.0 float brightness = 0.5f + progress * 0.5f; // Calculates saturation from 1.0 down to 0.1 float saturation = Math.max(0.1f, 1.0f - Math.max(0, progress - 0.5f) * 1.8f); //todo return Color.getHSBColor(0.61f, saturation, brightness); } private Object[] getDistancesOfRow(String returningRow) { Object[] rowsDistances = new Object[distances.length + additionalRow]; Loading Loading @@ -384,23 +382,24 @@ public class Heatmap { return scrollPane; } //TODO - header /** * Removes clicked column, adds it to a list of removed rows/columns and resets the table size * @param columnModel heatmap column model * @param removedColumn clicked colum for removal */ public void removeColumn(TableColumnModel columnModel, TableColumn removedColumn) { deletedColumns.put(removedColumn.getHeaderValue().toString(), removedColumn); columnModel.removeColumn(removedColumn); setTableSize(); } //TODO - header //TODO - refactoring //TODO - try to create hiddenRows /** * Removes clicked row, adds it to a list of removed rows/columns and resets the table size * @param removedRow clicked row for removal */ public void removeRow(int removedRow) { defaultTableModel.removeRow(removedRow); setTableSize(); table.getTableHeader().revalidate(); table.getTableHeader().repaint(); } /** Loading @@ -421,6 +420,15 @@ public class Heatmap { scrollPane.setVisible(true); } /** * Sets heatmap table visible */ public void setHeatmapVisibleIfNonVisible() { if (!isHeatmapVisible()) { setHeatmapVisible(); } } /** * Sets heatmap table not visible */ Loading
GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseColumnHandler.java +11 −11 Original line number Diff line number Diff line package cz.fidentis.analyst.gui.elements.heatmaptable; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.lang.ref.WeakReference; /** * Handler for moving columns in the heatmap * * @author Sabrina Oralkova */ public class MouseColumnHandler implements MouseListener, MouseMotionListener { private Integer column = null; private Integer column; private final WeakReference<JTable> table; private final WeakReference<DefaultTableModel> tableModel; public MouseColumnHandler(JTable table, DefaultTableModel model) { public MouseColumnHandler(JTable table) { this.table = new WeakReference<>(table); this.tableModel = new WeakReference<>(model); } @Override Loading @@ -28,8 +25,8 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mousePressed(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } column = table.columnAtPoint(event.getPoint()); Loading @@ -48,14 +45,14 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mouseDragged(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } int viewColumnIndex = table.columnAtPoint(event.getPoint()); if(column == null || viewColumnIndex == column || viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount()) { if(column == null || viewColumnIndex == column || isIndexOutOfRange(viewColumnIndex, table)) { return; } Loading @@ -67,4 +64,7 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener { @Override public void mouseMoved(MouseEvent event) {} private boolean isIndexOutOfRange(int viewColumnIndex, JTable table) { return viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount(); } }
GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseHandler.java→GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/MouseRowHandler.java +14 −10 Original line number Diff line number Diff line Loading @@ -8,17 +8,17 @@ import java.awt.event.MouseMotionListener; import java.lang.ref.WeakReference; /** * Handler for moving rows in the heatmap * * @author Sabrina Oralkova */ public class MouseHandler implements MouseListener, MouseMotionListener { private Integer row = null; public class MouseRowHandler implements MouseListener, MouseMotionListener { private Integer row; private final WeakReference<JTable> table; private final WeakReference<DefaultTableModel> tableModel; public MouseHandler(JTable table, DefaultTableModel model) { public MouseRowHandler(JTable table, DefaultTableModel model) { this.table = new WeakReference<>(table); this.tableModel = new WeakReference<>(model); } Loading @@ -28,8 +28,8 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mousePressed(MouseEvent event) { JTable table; if((table = this.table.get()) == null) { JTable table = this.table.get(); if(table == null) { return; } int viewRowIndex = table.rowAtPoint(event.getPoint()); Loading @@ -49,16 +49,17 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mouseDragged(MouseEvent event) { JTable table; DefaultTableModel tableModel; if((table = this.table.get()) == null || (tableModel = this.tableModel.get()) == null) { JTable table = this.table.get(); DefaultTableModel tableModel = this.tableModel.get(); if(table == null || tableModel == null) { return; } int viewRowIndex = table.rowAtPoint(event.getPoint()); int currentRow = table.convertRowIndexToModel(viewRowIndex); if(row == null || currentRow == row || currentRow < 0 || currentRow >= table.getRowCount()) { if(row == null || currentRow == row || isIndexOutOfRange(currentRow, table)) { return; } Loading @@ -70,4 +71,7 @@ public class MouseHandler implements MouseListener, MouseMotionListener { @Override public void mouseMoved(MouseEvent event) {} private boolean isIndexOutOfRange(int currentRow, JTable table) { return currentRow < 0 || currentRow >= table.getRowCount(); } }
GUI/src/main/java/cz/fidentis/analyst/gui/elements/heatmaptable/RowHeader.java +36 −36 Original line number Diff line number Diff line Loading @@ -38,42 +38,6 @@ public class RowHeader { rowHeader.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) { return new JTable(defaultTableModel, createRowHeaderModel()) { public String getToolTipText(MouseEvent e) { return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString(); } }; } private TableColumnModel createRowHeaderModel() { return new DefaultTableColumnModel() { boolean first = true; public void addColumn(TableColumn tc) { if (first) { super.addColumn(tc); tc.setHeaderValue(""); first = false; } } }; } private void createMouseRowHandler(DefaultTableModel defaultTableModel) { MouseHandler mouseHandler = new MouseHandler(rowHeader, defaultTableModel); rowHeader.addMouseListener(mouseHandler); rowHeader.addMouseMotionListener(mouseHandler); } private void createJViewport(JScrollPane scrollPane) { rowHeaderView = new JViewport(); rowHeaderView.setView(rowHeader); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); scrollPane.setRowHeaderView(rowHeaderView); } /** * Gets the row header for a table * Loading Loading @@ -112,4 +76,40 @@ public class RowHeader { rowHeader.getColumnModel().getColumn(0).setPreferredWidth(cellSize); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); } private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) { return new JTable(defaultTableModel, createRowHeaderModel()) { public String getToolTipText(MouseEvent e) { return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString(); } }; } private TableColumnModel createRowHeaderModel() { return new DefaultTableColumnModel() { boolean first = true; public void addColumn(TableColumn tc) { if (first) { super.addColumn(tc); tc.setHeaderValue(""); first = false; } } }; } private void createMouseRowHandler(DefaultTableModel defaultTableModel) { MouseRowHandler mouseRowHandler = new MouseRowHandler(rowHeader, defaultTableModel); rowHeader.addMouseListener(mouseRowHandler); rowHeader.addMouseMotionListener(mouseRowHandler); } private void createJViewport(JScrollPane scrollPane) { rowHeaderView = new JViewport(); rowHeaderView.setView(rowHeader); rowHeaderView.setPreferredSize(rowHeader.getMaximumSize()); scrollPane.setRowHeaderView(rowHeaderView); } }