All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.d3x.morpheus.viz.table.DataFrameCellEditor Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2014-2018 D3X Systems - All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.d3x.morpheus.viz.table;

import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.text.DecimalFormat;
import java.text.Format;
import java.util.Calendar;
import java.util.Date;
import java.util.EventObject;
import javax.swing.AbstractCellEditor;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.JTextComponent;

import com.d3x.morpheus.util.text.SmartFormat;

/**
 * A generic TableCellEditor that can be used to edit values of various types.
 *
 * @author Xavier Witdouck
 *
 * 

This is open source software released under the Apache 2.0 License

*/ public class DataFrameCellEditor extends AbstractCellEditor implements TableCellEditor { private Object value; private Component editor; private boolean selectAll = true; private ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) { stopCellEditing(); } }; /** * Constructor */ public DataFrameCellEditor() { super(); } /** * Returns true if this editor is in select all mode * @return true if in select all mode */ public boolean isSelectAll() { return selectAll; } /** * Sets whether this editor performs selectAll on edit * @param selectAll true to select all text on edit */ public void setSelectAll(boolean selectAll) { this.selectAll = selectAll; } @Override() public boolean isCellEditable(EventObject event) { if (event instanceof MouseEvent) { final MouseEvent me = (MouseEvent)event; return me.getClickCount() == 2; } else { return false; } } @Override() public boolean shouldSelectCell(EventObject event) { if (editor instanceof JTextComponent) { final JTextComponent textComponent = (JTextComponent)editor; if (selectAll) { SwingUtilities.invokeLater(new Runnable() { public void run() { textComponent.requestFocus(); textComponent.selectAll(); } }); } return true; } else { return false; } } @Override() public boolean stopCellEditing() { try { if (editor instanceof JFormattedTextField) { this.value = ((JFormattedTextField)editor).getValue(); this.fireEditingStopped(); return true; } else if (editor instanceof JTextField) { this.value = ((JTextField) editor).getText(); this.fireEditingStopped(); return true; } else if (editor instanceof JSpinner) { final JSpinner spinner = (JSpinner)editor; this.value = spinner.getValue(); this.fireEditingStopped(); return true; } else { this.fireEditingStopped(); return true; } } catch (Throwable t) { return false; } } @Override() public void cancelCellEditing() { fireEditingCanceled(); } /** @inheritDoc */ public Object getCellEditorValue() { return value; } /** @inheritDoc */ public Component getTableCellEditorComponent(JTable table, Object value, boolean selected, int rowIndex, int colIndex) { final TableCellRenderer renderer = table.getCellRenderer(rowIndex, colIndex); final JComponent component = (JComponent)renderer.getTableCellRendererComponent(table, value, selected, false, rowIndex, colIndex); final Font font = component.getFont(); System.out.println("getTableCellEditorComponent() value=" + value + "row=" + rowIndex + " column=" + colIndex); if (value == null) { final Format format = new SmartFormat(); final JFormattedTextField smartEditor = new JFormattedTextField(format); smartEditor.setBorder(component.getBorder()); smartEditor.setFont(font); smartEditor.setValue(value); smartEditor.addActionListener(actionListener); editor = smartEditor; } else if (value instanceof Double) { final Format doubleFormat = new DecimalFormat("0.00####;-0.00####"); final JFormattedTextField doubleEditor = new JFormattedTextField(doubleFormat); doubleEditor.setFont(font); doubleEditor.setValue(value); doubleEditor.setBorder(component.getBorder()); doubleEditor.addActionListener(actionListener); doubleEditor.setHorizontalAlignment(SwingConstants.RIGHT); editor = doubleEditor; } else if (value instanceof Integer) { final Format integerFormat = new DecimalFormat("0;-0"); final JFormattedTextField integerEditor = new JFormattedTextField(integerFormat); integerEditor.setFont(font); integerEditor.setBorder(component.getBorder()); integerEditor.setHorizontalAlignment(SwingConstants.RIGHT); integerEditor.setValue(value); integerEditor.addActionListener(actionListener); editor = integerEditor; } else if (value instanceof String) { final JTextField stringEditor = new JTextField(); stringEditor.setFont(font); stringEditor.setBorder(component.getBorder()); stringEditor.setText(value.toString()); stringEditor.addActionListener(actionListener); editor = stringEditor; } else if (value instanceof Date) { final SpinnerDateModel model = new SpinnerDateModel(); final JSpinner spinner = new JSpinner(model); final JSpinner.DateEditor dateEditor = new JSpinner.DateEditor(spinner, "dd-MMM-yyyy"); dateEditor.getTextField().setFont(font); dateEditor.getTextField().setBorder(component.getBorder()); spinner.setFont(font); spinner.setEditor(dateEditor); spinner.setValue(value); editor = spinner; } else if (value instanceof Calendar) { final SpinnerDateModel model = new SpinnerDateModel(); final JSpinner spinner = new JSpinner(model); final JSpinner.DateEditor dateEditor = new JSpinner.DateEditor(spinner, "dd-MMM-yyyy"); dateEditor.getTextField().setFont(font); dateEditor.getTextField().setBorder(component.getBorder()); dateEditor.getModel().setValue(((Calendar)value).getTime()); editor = dateEditor; } return editor; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy