Package org.swingml.tablebrowser.ext

Source Code of org.swingml.tablebrowser.ext.IconComponentCellEditor$IconMouseListener

package org.swingml.tablebrowser.ext;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;

import javax.swing.*;
import javax.swing.table.*;

import org.swingml.*;
import org.swingml.component.*;
import org.swingml.event.*;
import org.swingml.model.*;
import org.swingml.model.TableColumnModel;


/**
* @author NumberSix
*/
public class IconComponentCellEditor extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {

    private class IconMouseListener implements MouseListener {

        private IconModel model;
        private TableBrowserComponent tableBrowser;

        public IconMouseListener (IconModel iconModel, TableBrowserComponent table) {
            model = iconModel;
            tableBrowser = table;
        }

        public void mouseClicked (MouseEvent e) {
            String eventName = Constants.MOUSE_SINGLE_CLICKED;
            switch (e.getClickCount()) {
                case 1:
                    eventName = Constants.MOUSE_SINGLE_CLICKED;
                    break;
                case 2:
                    eventName = Constants.MOUSE_DOUBLE_CLICKED;
                    break;
            }
            EventHandler.getInstance().handleEvent(model, eventName, tableBrowser);
        }

        public void mouseEntered (MouseEvent e) {}

        public void mouseExited (MouseEvent e) {}

        public void mousePressed (MouseEvent e) {}

        public void mouseReleased (MouseEvent e) {}
    }

    public IconComponentCellEditor () {}

    public Object getCellEditorValue () {
        return null;
    }

    public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int row, int column) {
        return getTableCellRendererComponent(table, value, isSelected, true, row, column);

    }

    public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JPanel result = new JPanel();
        result.setBackground(Color.WHITE);
        result.setBorder(BorderFactory.createEmptyBorder());
        if (isSelected || hasFocus) {
            result.setBackground(table.getSelectionBackground());
            result.setForeground(table.getSelectionForeground());
        }
        FlowLayout layout = (FlowLayout) result.getLayout();

        final TableBrowserComponent tableBrowser = (TableBrowserComponent) table;
        final JTableModel model = (JTableModel) table.getModel();
        TableDataModel cellModel = model.getDataModel(tableBrowser.convertRowIndexToModel(row), tableBrowser.convertColumnIndexToModel(column));

        if (!isSelected) {
            // Do we have foreground/background colors to set?
            if (cellModel.getBackground() != null) {
                result.setBackground(cellModel.getBackground());
            }

            if (cellModel.getForeground() != null) {
                result.setForeground(cellModel.getForeground());
            }
        }

        // Look at column model and default this to the column model's ALIGN attribute instead of hard coding it.
        int columnInModel = table.convertColumnIndexToModel(column);
        TableColumnModel columnModel = (TableColumnModel) model.getColumns().get(columnInModel);
        String columnAlignment = columnModel.getAlignment();
        layout.setAlignment(FlowLayout.LEFT);
        if (columnAlignment != null) {
            if (columnAlignment.equals(Constants.CENTER)) {
                layout.setAlignment(FlowLayout.CENTER);
            } else if (columnAlignment.equals(Constants.RIGHT)) {
                layout.setAlignment(FlowLayout.RIGHT);
            }
        }

        layout.setVgap(0);
        result.setLayout(layout);

        // add this to fire events on the panel
        result.addMouseListener(new MouseListener() {

            public void mouseClicked (MouseEvent e) {
                String eventName = Constants.MOUSE_SINGLE_CLICKED;
                switch (e.getClickCount()) {
                    case 1:
                        eventName = Constants.MOUSE_SINGLE_CLICKED;
                        break;
                    case 2:
                        eventName = Constants.MOUSE_DOUBLE_CLICKED;
                        break;
                }
                EventHandler.getInstance().handleEvent(model, eventName, tableBrowser);
            }

            public void mouseEntered (MouseEvent e) {}

            public void mouseExited (MouseEvent e) {}

            public void mousePressed (MouseEvent e) {}

            public void mouseReleased (MouseEvent e) {}
        });

        if (cellModel.hasIcons()) {
            List iconModels = cellModel.getChildren();
            if (iconModels != null && iconModels.size() > 0) {
                Iterator schmiterator = iconModels.iterator();
                while (schmiterator.hasNext()) {
                    IconModel iconModel = (IconModel) schmiterator.next();
                    JLabel icon = new JLabel();
                    icon.addMouseListener(new IconMouseListener(iconModel, tableBrowser));

                    // set icon
                    if (iconModel.getIcon() != null) {
                        ImageIcon icon2 = IconFactory.getIcon(iconModel);
                        if (icon2 != null) {
                            icon.setIcon(icon2);
                        }
                    } else {
                        icon.setText(iconModel.getText());
                    }

                    if (!isSelected) {
                        // Do we have foreground/background colors to set?
                        if (cellModel.getForeground() != null) {
                            icon.setForeground(cellModel.getForeground());
                        }

                        if (iconModel.getForeground() != null) {
                            icon.setForeground(iconModel.getForeground());
                        }
                    }

                    if (iconModel.getTooltip() != null && iconModel.getTooltip().length() > 0) {
                        icon.setToolTipText(iconModel.getTooltip());
                    }

                    Font font = table.getFont();
                    Font iconFont = new Font(font.getName(), Font.PLAIN, font.getSize());
                    icon.setFont(iconFont);

                    if (isSelected || hasFocus) {
                        icon.setBackground(table.getSelectionBackground());
                        icon.setForeground(table.getSelectionForeground());
                    }

                    if (!table.isEnabled()) {
                        icon.setForeground(Color.LIGHT_GRAY);
                    }

                    result.add(icon);
                }
            }
        }

        return result;
    }
}
TOP

Related Classes of org.swingml.tablebrowser.ext.IconComponentCellEditor$IconMouseListener

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.