Package cli_fmw.utils.sorted_table

Source Code of cli_fmw.utils.sorted_table.SortedTable$Defaultlistener

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.utils.sorted_table;

import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.ConfigGui;
import cli_fmw.utils.ErrorValue;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.sorted_table.renderer.SortedErrorRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.BooleanRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.CollectionRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.DateRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.DefaultRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.DoubleRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.IconRenderer;
import cli_fmw.utils.sorted_table.renderer.simple.NumberRenderer;
import cli_fmw.utils.table_config_states.StateAttachable;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.RowSorter;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
*
* @author petr
*/
public class SortedTable extends JTable implements StateAttachable {

    private static DefaultRenderer defaultRenderer = new DefaultRenderer();
    private static NumberRenderer numberRenderer = new NumberRenderer();
    private static DoubleRenderer doubleRenderer = new DoubleRenderer();
    private static DateRenderer dateRenderer = new DateRenderer();
    private static IconRenderer iconRenderer = new IconRenderer();
    private static BooleanRenderer booleanRenderer = new BooleanRenderer();
    private static CollectionRenderer collectionRenderer = new CollectionRenderer();
    private Defaultlistener defaultlistener = new Defaultlistener();

//    private RowSorter<TableModel> defaultRowSorter;   
    private class Defaultlistener extends MouseAdapter {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() < 2) {
                int col = SortedTable.this.columnAtPoint(e.getPoint());
                int row = SortedTable.this.rowAtPoint(e.getPoint());
//                System.err.print("CLICK ON SORTED TABLE point:" + e.getPoint() + " cell: [" + col
//                        +  "," + row +"]" +
//                        " value: ");
                Object value = SortedTable.this.getValueAt(row, col);
//                System.err.println(value);
//                System.err.println("CLICK ON SORTED TABLE colCount: " + SortedTable.this.getColumnCount() + " rowCount: " + SortedTable.this.getRowCount());
                if (value != null && value instanceof ErrorValue) {
                    MessageBox.showException(((ErrorValue) value).getException());
                }
            }
        }
    }

    private static class DefaultEditor extends DefaultCellEditor {

        public DefaultEditor() {
            super(new JTextField());
            delegate = new EditorDelegate() {

                @Override
                public void setValue(Object value) {
                    if (value instanceof DirectoryItemRO) {
                        ((JTextField) editorComponent).setText((value != null) ? ((DirectoryItemRO) value).getTitle() : "");
                    } else {
                        ((JTextField) editorComponent).setText((value != null) ? value.toString() : "");
                    }
                }

                @Override
                public Object getCellEditorValue() {
                    return ((JTextField) editorComponent).getText();
                }
            };
        }
    }
    private static DefaultEditor editor = new DefaultEditor();

    public SortedTable(Object[][] rowData, Object[] columnNames) {
        super(rowData, columnNames);
        initExtensionComponents();
    }

    public SortedTable(Vector rowData, Vector columnNames) {
        super(rowData, columnNames);
        initExtensionComponents();
    }

    public SortedTable(int numRows, int numColumns) {
        super(numRows, numColumns);
        initExtensionComponents();
    }

    public SortedTable(TableModel dm, TableColumnModel cm) {
        super(dm, cm);
        initExtensionComponents();
    }

    public SortedTable(TableModel dm) {
        super(dm);
        initExtensionComponents();
    }

    public SortedTable() {
        super();
        initExtensionComponents();
    }

    public SortedTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) {
        super(dm, cm, sm);
        initExtensionComponents();
    }

    private void initExtensionComponents() {
        initDefaultProperties();
        initRenderer();
        initSorter();
        this.addMouseListener(defaultlistener);//+mouseListener
    }

    /**
     * Дефолтный рендерер
     */
    private void initRenderer() {
        this.setDefaultRenderer(Object.class, defaultRenderer);
        this.setDefaultRenderer(Number.class, numberRenderer);
        this.setDefaultRenderer(Float.class, doubleRenderer);
        this.setDefaultRenderer(Double.class, doubleRenderer);
        this.setDefaultRenderer(Date.class, dateRenderer);
        this.setDefaultRenderer(Icon.class, iconRenderer);
        this.setDefaultRenderer(ImageIcon.class, iconRenderer);
        this.setDefaultRenderer(Boolean.class, booleanRenderer);
        this.setDefaultRenderer(Collection.class, collectionRenderer);
        this.setDefaultRenderer(List.class, collectionRenderer);
        this.setDefaultRenderer(Set.class, collectionRenderer);

        this.setDefaultEditor(Object.class, editor);
    }

    /**
     * Дефолтный сортировщик
     */
    private void initSorter() {
        this.setRowSorter(new TableRowSorter(this.dataModel));
    }

    /**
     * Дефолтные свойства
     */
    private void initDefaultProperties() {
        this.setShowGrid(true);
        this.setShowHorizontalLines(false);
        this.setRowMargin(0);
    //this.getTableHeader().setReorderingAllowed(false);
    }

    @Override
    public int getEditingRow() {
        int er = super.getEditingRow();

        return er;
    }

    /**
     * Can be used but return selected row "as see" (not row in model), and this data can be
     * incorrect and need converting to model row
     * @return
     * @see RowSorter
     * @deprecated
     */
    @Deprecated
    @Override
    public int getSelectedRow() {
        return super.getSelectedRow();
    }

    /**
     * Can be used but return selected rows "as see" (not rows in model), and this data can be
     * incorrect and need converting to model row
     * @return
     * @see RowSorter
     * @deprecated
     */
    @Deprecated
    @Override
    public int[] getSelectedRows() {
        return super.getSelectedRows();
    }

    @Override
    public Object getValueAt(int row, int column) {
//        System.err.print("GET VALUE AT in SORTED TABLE cell: [" + column
//                        +  "," + row +"]");
        Object value = super.getValueAt(row, column);
//        System.err.println(" value: " + value);
        return value;
    }

    @Override
    public void setModel(TableModel dataModel) {
        super.setModel(dataModel);
        initSorter();
    }

    /**
     * Convert number of selection row to model.
     * If selected nothing return -1
     * @return
     */
    public int getSelectedRowSorted() {
        int row = super.getSelectedRow();
        if (row < 0 || row >= super.getRowCount()) {
            return row;
        }
        RowSorter<? extends TableModel> rowSorter = this.getRowSorter();
//        System.err.print("getSelectedRow, Sorted table, row: " + row);
        if (rowSorter != null) {
            row = rowSorter.convertRowIndexToModel(row);
        }
//        System.err.println(" --> " + row);
        return row;
    }

    /**
     * Convert numbers of selection rows to model.
     * Numbers sorted from min to max
     * @return
     */
    public int[] getSelectedRowsSorted() {
        int[] selectedRows = super.getSelectedRows();
        RowSorter<? extends TableModel> rowSorter = this.getRowSorter();
//        System.err.println("===getSelectedRows, Sorted table===");
        if (rowSorter != null) {
            for (int i = 0; i < selectedRows.length; i++) {
//                System.err.print("Row: " + selectedRows[i]);
                selectedRows[i] = rowSorter.convertRowIndexToModel(selectedRows[i]);
//                System.err.println(" --> " + selectedRows[i]);
            }
        }
//        System.err.println("==================");
        Arrays.sort(selectedRows);
        return selectedRows;
    }

    @Override
    public SortedErrorRenderer getCellRenderer(int row, int column) {
        return (SortedErrorRenderer) super.getCellRenderer(row, column);
    }

    @Override
    public Rectangle getCellRect(int row, int column, boolean includeSpacing) {
        Rectangle cellRect = super.getCellRect(row, column, includeSpacing);
//        if (row == this.getRowCount()-1){
//            cellRect.setSize(cellRect.width, cellRect.height+1);
//        }
//        System.err.println("CELL RECT w: " + cellRect.width + " h: " + cellRect.height);
        return cellRect;
    }

    @Override
    public void paint(Graphics g) {
        if (!attached) {
            attached = true;
            if (ConfigGui.isLoaded()) {
                MessageBox.asyncShowExceptionOnly(new ClipsException(
                        "Таблица " + getClass().getName() + " не прикреплена к хранителю состояний, чтобы прикрепить " +
                        "таблицу, вызовете StateSaver.attachTo(this) последней " +
                        "строкой конструктора контенера"), false);
            }
        }
        //super.paint(g);
        super.paint(g);
        int height = this.getHeight();
        int width = this.getWidth();
        g.setColor(gridColor);
        g.drawLine(0, height - 1, width, height - 1);
    }

    @Override
    public void setSelectionMode(int selectionMode) {
        super.setSelectionMode(selectionMode);
    }
    private boolean attached;

    @Override
    public boolean isAttached() {
        return attached;
    }

    @Override
    public void setAttached(boolean attached) {
        this.attached = attached;
    }
}
TOP

Related Classes of cli_fmw.utils.sorted_table.SortedTable$Defaultlistener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.