Author: vsalaun Date: 2011-05-16 12:21:28 +0200 (Mon, 16 May 2011) New Revision: 3127 Url: http://chorem.org/repositories/revision/lima/3127 Log: amelioration de l'editeur de BigDecimal Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/BigDecimalTableCellEditor.java Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/BigDecimalTableCellEditor.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/BigDecimalTableCellEditor.java 2011-05-16 09:45:16 UTC (rev 3126) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/BigDecimalTableCellEditor.java 2011-05-16 10:21:28 UTC (rev 3127) @@ -1,30 +1,34 @@ package org.chorem.lima.ui.celleditor; import java.awt.Component; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.math.BigDecimal; -import java.util.Date; import java.util.EventObject; import javax.swing.AbstractCellEditor; -import javax.swing.DefaultCellEditor; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; import javax.swing.table.TableCellEditor; -import javax.swing.text.JTextComponent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.LimaContext; -public class BigDecimalTableCellEditor extends AbstractCellEditor implements TableCellEditor { +public class BigDecimalTableCellEditor extends AbstractCellEditor + implements TableCellEditor, FocusListener, AncestorListener, KeyListener { private static final Log log = LogFactory.getLog(BigDecimalTableCellEditor.class); private static final long serialVersionUID = 1L; protected final JTextField textField; + private boolean keyPressed; /** * constructor @@ -33,6 +37,10 @@ textField = new JTextField(); textField.setEditable(true); textField.setHorizontalAlignment(SwingConstants.RIGHT); + textField.addFocusListener(this); + textField.addAncestorListener(this); + textField.addKeyListener(this); + keyPressed = false; } @Override @@ -56,5 +64,61 @@ return bdValue; } } + + @Override + public boolean isCellEditable(EventObject evt) { + return !(evt instanceof MouseEvent) || ((MouseEvent) evt).getClickCount() == 2; + } + + /** + * Listeners + */ + @Override + public void focusGained(FocusEvent e) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + textField.selectAll(); + } + }); + } + + @Override + public void focusLost(FocusEvent e) { + keyPressed = false; + } + + @Override + public void ancestorAdded(final AncestorEvent e) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + textField.requestFocus(); + } + }); + } + @Override + public void ancestorRemoved(AncestorEvent e) { + } + + @Override + public void ancestorMoved(AncestorEvent e) { + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + } + + @Override + public void keyReleased(KeyEvent e) { + if (keyPressed == false) { + textField.setText(String.valueOf(e.getKeyChar())); + keyPressed = true; + } + } + }