public SelectPathButton(int type) { super(); // SHAPE_LIST); this.type = type; Path2D p = new GeneralPath(); Shapes.Search(p); // Shapes.ListView(p); // Shapes.Picker(p); final Shape icnShp = p.createTransformedShape(AffineTransform.getScaleInstance(0.5, 0.5)); setIcon( new Icon() { @Override public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2 = (Graphics2D) g; g2.setColor(isEnabled() ? Color.black : Color.gray); g2.translate(x, y); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2.fill(icnShp); g2.translate(-x, -y); } @Override public int getIconWidth() { return 16; } @Override public int getIconHeight() { return 16; } }); setToolTipText("Choose File..."); setTransferHandler(new PathTransferHandler()); final MouseInputAdapter mia = new MouseInputAdapter() { private MouseEvent dndInit = null; private boolean dndStarted = false; public void mousePressed(MouseEvent e) { dndInit = e; dndStarted = false; } public void mouseReleased(MouseEvent e) { if (!dndStarted && contains(e.getPoint())) showFileChooser(); dndInit = null; dndStarted = false; } public void mouseDragged(MouseEvent e) { if (!dndStarted && (dndInit != null) && ((Math.abs(e.getX() - dndInit.getX()) > 5) || (Math.abs(e.getY() - dndInit.getY()) > 5))) { JComponent c = (JComponent) e.getSource(); c.getTransferHandler().exportAsDrag(c, e, TransferHandler.COPY); dndStarted = true; } } }; addMouseListener(mia); addMouseMotionListener(mia); }