 <p>In your requirements, your explain that you want to allow a double click with a fast delay. But the <code>e.getClickCount()==2</code> you use is not the solution for that because it's limited by your OS configuration. You can get it by looking the result of <code>Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval")</code></p> <p>A simple and good way to bypass the problem is that you handle yourself the delay between two clicks in the mouse listener. You could use a Timer where you can choose the interval max between your clicks and to handle by oneself the count.</p> <p>The solution is rather simple. So since your code was testable, I modified it directly and i tested. It works for me. To summarize my modifications, I have added an boolean instance to count the current click count and have separated the double-click detection (technical) and the double click handling (logic) in two places. It's more readable. I have chosen 0.5 second as delay max authorized between two clicks. You can chose another value but if the value is too important (for example one second or more), it can give unexpected double clicks.</p> <pre><code>class CreateFrame extends JFrame { ... private boolean isAlreadyOneClick; ... addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (isAlreadyOneClick) { handleDoubleClick(e); isAlreadyOneClick = false; } else { isAlreadyOneClick = true; Timer t = new Timer("doubleclickTimer", false); t.schedule(new TimerTask() { @Override public void run() { isAlreadyOneClick = false; } }, 500); } } private void handleDoubleClick(MouseEvent e) { JTable table = (JTable) e.getSource(); Point p = e.getPoint(); int row = table.rowAtPoint(p); String type = getValueAt(row, 2).toString().toLowerCase(); if (type.contains("root") || type.contains("folder")) { File file = new File((path != null ? path + "/" + getValueAt(row, 1) : getValueAt(row, 1).toString())); if (file != null) repopulateFileFolderList(file); } else if (getValueAt(row, 1).toString().toLowerCase().contains("up one") &amp;&amp; getValueAt(row, 2).toString().equals("")) { File file = path.getParentFile(); if (file != null) repopulateFileFolderList(file); else getTableRoot(); } else { System.out.println("Not a directory!"); } } } </code></pre>