Index: src/test/java/wjhk/jupload2/testhelpers/JUploadPanelTestHelper.java
===================================================================
--- src/test/java/wjhk/jupload2/testhelpers/JUploadPanelTestHelper.java	(révision 1378)
+++ src/test/java/wjhk/jupload2/testhelpers/JUploadPanelTestHelper.java	(copie de travail)
@@ -26,6 +26,7 @@
 package wjhk.jupload2.testhelpers;
 
 import java.awt.event.ActionListener;
+import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 
@@ -184,6 +185,14 @@
 		throw new UnsupportedOperationException(this.getClass()
 				+ ".getMouseListener() is not implemented in tests cases");
 	}
+    
+    /**
+	 * @see wjhk.jupload2.gui.JUploadPanel#getKeyListener()
+	 */
+	public KeyListener getKeyListener() {
+		throw new UnsupportedOperationException(this.getClass()
+				+ ".getKeyListener() is not implemented in tests cases");
+	}
 
 	/**
 	 * @see wjhk.jupload2.gui.JUploadPanel#getPreparationProgressBar()
Index: src/main/java/wjhk/jupload2/gui/JUploadPanelImpl.java
===================================================================
--- src/main/java/wjhk/jupload2/gui/JUploadPanelImpl.java	(révision 1378)
+++ src/main/java/wjhk/jupload2/gui/JUploadPanelImpl.java	(copie de travail)
@@ -30,6 +30,8 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 
@@ -43,6 +45,7 @@
 import javax.swing.JPanel;
 import javax.swing.JProgressBar;
 import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
 import javax.swing.ScrollPaneConstants;
 import javax.swing.SwingConstants;
 import javax.swing.TransferHandler;
@@ -63,7 +66,7 @@
  * @version $Revision$
  */
 public class JUploadPanelImpl extends JPanel implements ActionListener,
-		JUploadPanel, MouseListener {
+		JUploadPanel, MouseListener, KeyListener {
 
 	/** A generated serialVersionUID, to avoid warning during compilation */
 	private static final long serialVersionUID = -1212601012568225757L;
@@ -149,9 +152,10 @@
 				this.uploadPolicy, this);
 		this.setTransferHandler(jUploadTransfertHandler);
 		this.filePanel.setTransferHandler(jUploadTransfertHandler);
+        ((FilePanelTableImp) this.filePanel).addKeyListener(this);
+        ((FilePanelTableImp) this.filePanel).setFocusable(true);
 		ActionMap map = this.getActionMap();
-		map.put(TransferHandler.getPasteAction().getValue(Action.NAME),
-				TransferHandler.getPasteAction());
+        map.put(TransferHandler.getPasteAction().getValue(Action.NAME), TransferHandler.getPasteAction());
 
 		// The JUploadPanelImpl will listen to Mouse messages for the standard
 		// component. The current only application of this, it the CTRL+Righ
@@ -163,11 +167,16 @@
 		this.uploadButton.addMouseListener(this);
 
 		this.jLogWindowPane.addMouseListener(this);
-		logWindow.addMouseListener(this);
+        this.jLogWindowPane.setFocusable(true);
+		this.logWindow.addMouseListener(this);
+        this.logWindow.setFocusable(true);
 		this.preparationProgressBar.addMouseListener(this);
 		this.uploadProgressBar.addMouseListener(this);
+        this.uploadProgressBar.addKeyListener(this);
+        this.uploadProgressBar.setFocusable(true);
 		this.statusLabel.addMouseListener(this);
-
+        this.statusLabel.addKeyListener(this);
+        
 		// Then: display them on the applet
 		this.uploadPolicy.addComponentsToJUploadPanel(this);
 	}
@@ -386,14 +395,7 @@
 				.getValue(Action.NAME);
 
 		if (e.getActionCommand().equals(actionPaste)) {
-			Action a = getActionMap().get(actionPaste);
-			if (a != null) {
-				a.actionPerformed(new ActionEvent(this.filePanel,
-                    ActionEvent.ACTION_PERFORMED, e.getActionCommand()));
-                this.uploadPolicy.afterFileDropped(new DropTargetDropEvent(new DropTarget(
-                    this.filePanel.getDropComponent(), this.dndListener).getDropTargetContext(),
-                    new Point(), DnDConstants.ACTION_MOVE, DnDConstants.ACTION_COPY_OR_MOVE ));
-			}
+            processPasteAction(e.getActionCommand());			
 		} else if (e.getActionCommand() == this.browseButton.getActionCommand()) {
 			doBrowse();
 		} else if (e.getActionCommand() == this.removeButton.getActionCommand()) {
@@ -411,8 +413,7 @@
 			doStopUpload();
 		}
 		// focus the table. This is necessary in order to enable mouse
-		// events
-		// for triggering tooltips.
+		// events for triggering tooltips.
 		this.filePanel.focusTable();
 	}
 
@@ -482,6 +483,7 @@
 				}
 			}
 		}
+        this.filePanel.focusTable();
 		return false;
 	}
 
@@ -529,6 +531,10 @@
 	public ActionListener getActionListener() {
 		return this;
 	}
+    /** {@inheritDoc} */
+    public KeyListener getKeyListener() {
+		return this;
+	}
 
 	/** {@inheritDoc} */
 	public JButton getBrowseButton() {
@@ -622,4 +628,29 @@
 		return fileUploadManagerThread;
 	}
 
+  public void keyTyped(KeyEvent e) {
+    if(e.isControlDown() && (e.getKeyChar() == 'c' || e.getKeyChar() == 'C' || e.getKeyChar() == '\u0016')) {
+      processPasteAction("paste");
+      this.filePanel.focusTable();
+    }
+
+  }
+
+  public void keyPressed(KeyEvent e) {
+  }
+
+  public void keyReleased(KeyEvent e) {     
+  }
+  
+  
+  protected void processPasteAction(String command) {
+      Action a = getActionMap().get(TransferHandler.getPasteAction().getValue(Action.NAME));
+      if (a != null) {
+          a.actionPerformed(new ActionEvent(this.filePanel, ActionEvent.ACTION_PERFORMED, command));
+          this.uploadPolicy.afterFileDropped(new DropTargetDropEvent(new DropTarget(
+              this.filePanel.getDropComponent(), this.dndListener).getDropTargetContext(),
+              new Point(), DnDConstants.ACTION_MOVE, DnDConstants.ACTION_COPY_OR_MOVE ));
+      }
+  }
+
 }
Index: src/main/java/wjhk/jupload2/gui/JUploadPanel.java
===================================================================
--- src/main/java/wjhk/jupload2/gui/JUploadPanel.java	(révision 1378)
+++ src/main/java/wjhk/jupload2/gui/JUploadPanel.java	(copie de travail)
@@ -23,6 +23,7 @@
 package wjhk.jupload2.gui;
 
 import java.awt.event.ActionListener;
+import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 
@@ -141,6 +142,13 @@
      * @return the MouseListener
      */
     public MouseListener getMouseListener();
+    
+     /**
+     * The component that manages the keyboard.
+     * 
+     * @return the KeyListener
+     */
+	public KeyListener getKeyListener();
 
     /**
      * @return the preparationProgressBar
Index: src/main/java/wjhk/jupload2/gui/filepanel/FilePanelTableImp.java
===================================================================
--- src/main/java/wjhk/jupload2/gui/filepanel/FilePanelTableImp.java	(révision 1378)
+++ src/main/java/wjhk/jupload2/gui/filepanel/FilePanelTableImp.java	(copie de travail)
@@ -59,7 +59,7 @@
     /**
      * The main panel of the applet.
      */
-    private JUploadPanel juploadPanel = null;;
+    private JUploadPanel juploadPanel = null;
 
     /**
      * Creates a new instance.
@@ -74,6 +74,7 @@
 
         setLayout(new BorderLayout());
         addMouseListener(juploadPanel.getMouseListener());
+        addKeyListener(juploadPanel.getKeyListener());
         setTransferHandler(juploadPanel.getTransferHandler());
 
         this.jtable = new FilePanelJTable(juploadPanel, uploadPolicy);
@@ -90,6 +91,7 @@
         JScrollPane scrollPane = new JScrollPane(this.jtable);
         add(scrollPane, BorderLayout.CENTER);
         scrollPane.addMouseListener(juploadPanel.getMouseListener());
+        scrollPane.addKeyListener(juploadPanel.getKeyListener());
     }
 
     /**
Index: src/main/java/wjhk/jupload2/policies/DefaultUploadPolicy.java
===================================================================
--- src/main/java/wjhk/jupload2/policies/DefaultUploadPolicy.java	(révision 1378)
+++ src/main/java/wjhk/jupload2/policies/DefaultUploadPolicy.java	(copie de travail)
@@ -1041,7 +1041,7 @@
 		// Then, we display it to the user.
 		String alertMsg = errorText;
 		// Then, the message body can be completed by the exception message.
-		if (exception != null && (errorText == null || errorText.equals(""))) {
+		if (exception != null && (errorText == null || "".equals(errorText))) {
 			// Ok, we have an exception.
 			if (exception.getCause() != null) {
 				alertMsg = exception.getCause().getMessage();
