package com.github.xsavikx.androidscreencast.ui.model;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import java.awt.*;
@Singleton
public class InputKeyEventTable extends JTable {
private static final long serialVersionUID = 3978642864003531967L;
private final static int MIN_COLUMN_WIDTH = 20;
@Inject
public InputKeyEventTable(InputKeyEventTableModel tableModel) {
super(tableModel);
setTableColumnsNames(InputKeyEventTableModel.COLUMN_NAMES);
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setTableColumnsPreferredSize();
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
private void setTableColumnsNames(String[] columnNames) {
TableColumnModel columnModel = getColumnModel();
for (int i = 0; i < columnNames.length; i++) {
TableColumn column = columnModel.getColumn(i);
column.setHeaderValue(columnNames[i]);
}
}
private void setTableColumnsPreferredSize() {
final TableColumnModel columnModel = getColumnModel();
for (int column = 0; column < getColumnCount(); column++) {
int width = MIN_COLUMN_WIDTH; // Min width
for (int row = 0; row < getRowCount(); row++) {
TableCellRenderer renderer = getCellRenderer(row, column);
Component comp = prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width + 5, width);
}
columnModel.getColumn(column).setPreferredWidth(width);
}
}
}