Drag and drop in jscrollpane
Hi all
I have 2 different scrollpanes setup in 2 different panels. one of them contains a rdf graph structure which is generated by me using several other APIs. Now I want to drag and drop some of the nodes from one scroll pane to another. The nodes have features to be selected. I am totally new to java drag n drop. Can some one help me by providing some basic code to move stuff between scrollpanes??
No, I do not (and cannot) use TransferHandler and such. The Drag and Drop is done manually by using MouseListener and MouseMotionListener.
And also, my problem is not the drag and drop functionality. The problem is only the scrolling.
Similar Messages
-
How to outline selected cells during drag and drop in the jtable
Hi,
I have spent a lot of time to find out how to outline selected cells during drag in the jtable, but I did not find the answer.
Can anybody give me a tip, where to read more about this problem or even better, give an example...
I have the following situation:
1.Table has 10 rows and 10 columns
2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) and setCellSelectionEnabled(true)
3.user select 5 cells in 4th row (for example cell45,cell46,cell47,cell48 and cell49)
4.user starts dragging. During dragging an outline should be drawn. Outline should be a rectangular with width of 5 cells and height of one cell. Outline should move according to the mouse position.
5.rectangular disappears when dropped
Regards,
PrimozIn "createTransferable" you can create a drag image
which you can paint in "dragOver" and clear in "drop" method of DropTarget :
package dnd;
* DragDropJTableCellContents.java
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class DragDropJTableCellContents extends JFrame {
public DragDropJTableCellContents() {
setTitle("Drag and Drop JTable");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(createTable("JTable"), BorderLayout.CENTER);
setSize(400, 300);
setLocationRelativeTo(null);
private JPanel createTable(String tableId) {
DefaultTableModel model = new DefaultTableModel();
for (int i = 0; i < 10; i++) {
model.addColumn("Column "+i);
for (int i = 0; i < 10; i++) {
String[] rowData = new String[10];
for (int j = 0; j < 10; j++) {
rowData[j] = tableId + " " + i + j;
model.addRow(rowData);
JTable table = new JTable(model);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setCellSelectionEnabled(true);
JScrollPane scrollPane = new JScrollPane(table);
table.setDragEnabled(true);
TableTransferHandler th = new TableTransferHandler();
table.setTransferHandler(th);
table.setDropTarget(new TableDropTarget(th));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JPanel panel = new JPanel(new BorderLayout());
panel.add(scrollPane);
panel.setBorder(BorderFactory.createTitledBorder(tableId));
return panel;
public static void main(String[] args) {
new DragDropJTableCellContents().setVisible(true);
abstract class StringTransferHandler extends TransferHandler {
public int dropAction;
protected abstract String exportString(JComponent c);
protected abstract void importString(JComponent c, String str);
@Override
protected Transferable createTransferable(JComponent c) {
return new StringSelection(exportString(c));
@Override
public int getSourceActions(JComponent c) {
return COPY;
@Override
public boolean importData(JComponent c, Transferable t) {
if (canImport(c, t.getTransferDataFlavors())) {
try {
String str = (String) t.getTransferData(DataFlavor.stringFlavor);
importString(c, str);
return true;
} catch (UnsupportedFlavorException ufe) {
} catch (IOException ioe) {
return false;
@Override
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int ndx = 0; ndx < flavors.length; ndx++) {
if (DataFlavor.stringFlavor.equals(flavors[ndx])) {
return true;
return false;
class TableTransferHandler extends StringTransferHandler {
private int dragRow;
private int[] dragColumns;
private BufferedImage[] image;
private int row;
private int[] columns;
public JTable target;
@Override
protected Transferable createTransferable(JComponent c) {
JTable table = (JTable) c;
dragRow = table.getSelectedRow();
dragColumns = table.getSelectedColumns();
createDragImage(table);
return new StringSelection(exportString(c));
protected String exportString(JComponent c) {
JTable table = (JTable) c;
row = table.getSelectedRow();
columns = table.getSelectedColumns();
StringBuffer buff = new StringBuffer();
for (int j = 0; j < columns.length; j++) {
Object val = table.getValueAt(row, columns[j]);
buff.append(val == null ? "" : val.toString());
if (j != columns.length - 1) {
buff.append(",");
return buff.toString();
protected void importString(JComponent c, String str) {
target = (JTable) c;
DefaultTableModel model = (DefaultTableModel) target.getModel();
String[] values = str.split("\n");
int colCount = target.getSelectedColumn();
int max = target.getColumnCount();
for (int ndx = 0; ndx < values.length; ndx++) {
String[] data = values[ndx].split(",");
for (int i = 0; i < data.length; i++) {
String string = data;
if(colCount < max){
model.setValueAt(string, target.getSelectedRow(), colCount);
colCount++;
public BufferedImage[] getDragImage() {
return image;
private void createDragImage(JTable table) {
if (dragColumns != null) {
try {
image = new BufferedImage[dragColumns.length];
for (int i = 0; i < dragColumns.length; i++) {
Rectangle cellBounds = table.getCellRect(dragRow, i, true);
TableCellRenderer r = table.getCellRenderer(dragRow, i);
DefaultTableModel m = (DefaultTableModel) table.getModel();
JComponent lbl = (JComponent) r.getTableCellRendererComponent(table,
table.getValueAt(dragRow, dragColumns[i]), false, false, dragRow, i);
lbl.setBounds(cellBounds);
BufferedImage img = new BufferedImage(lbl.getWidth(), lbl.getHeight(),
BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D graphics = img.createGraphics();
graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
lbl.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
lbl.paint(graphics);
graphics.dispose();
image[i] = img;
} catch (RuntimeException re) {
class TableDropTarget extends DropTarget {
private Insets autoscrollInsets = new Insets(20, 20, 20, 20);
private Rectangle rect2D = new Rectangle();
private TableTransferHandler handler;
public TableDropTarget(TableTransferHandler h) {
super();
this.handler = h;
@Override
public void dragOver(DropTargetDragEvent dtde) {
handler.dropAction = dtde.getDropAction();
JTable table = (JTable) dtde.getDropTargetContext().getComponent();
Point location = dtde.getLocation();
int row = table.rowAtPoint(location);
int column = table.columnAtPoint(location);
table.changeSelection(row, column, false, false);
paintImage(table, location);
autoscroll(table, location);
super.dragOver(dtde);
public void dragExit(DropTargetDragEvent dtde) {
clearImage((JTable) dtde.getDropTargetContext().getComponent());
super.dragExit(dtde);
@Override
public void drop(DropTargetDropEvent dtde) {
Transferable data = dtde.getTransferable();
JTable table = (JTable) dtde.getDropTargetContext().getComponent();
clearImage(table);
handler.importData(table, data);
super.drop(dtde);
private final void paintImage(JTable table, Point location) {
Point pt = new Point(location);
BufferedImage[] image = handler.getDragImage();
if (image != null) {
table.paintImmediately(rect2D.getBounds());
rect2D.setLocation(pt.x - 15, pt.y - 15);
int wRect2D = 0;
int hRect2D = 0;
for (int i = 0; i < image.length; i++) {
table.getGraphics().drawImage(image[i], pt.x - 15, pt.y - 15, table);
pt.x += image[i].getWidth();
if (hRect2D < image[i].getHeight()) {
hRect2D = image[i].getHeight();
wRect2D += image[i].getWidth();
rect2D.setSize(wRect2D, hRect2D);
private final void clearImage(JTable table) {
table.paintImmediately(rect2D.getBounds());
private Insets getAutoscrollInsets() {
return autoscrollInsets;
private void autoscroll(JTable table, Point cursorLocation) {
Insets insets = getAutoscrollInsets();
Rectangle outer = table.getVisibleRect();
Rectangle inner = new Rectangle(outer.x + insets.left,
outer.y + insets.top,
outer.width - (insets.left + insets.right),
outer.height - (insets.top + insets.bottom));
if (!inner.contains(cursorLocation)) {
Rectangle scrollRect = new Rectangle(cursorLocation.x - insets.left,
cursorLocation.y - insets.top,
insets.left + insets.right,
insets.top + insets.bottom);
table.scrollRectToVisible(scrollRect);
Edited by: Andre_Uhres on Nov 18, 2007 10:03 PM -
Must click then click and drag for JTable Drag and Drop
Hi All,
I've been using Java 1.4 to drag and drop data between two tables in our application. Basically I need to drag the data from individual rows of the source table and insert it into one of the cells in the new table. This works absolutely fine and has made a huge improvement to this portion of our app. I've included example source code below that does a similar thing by transferring data from one table and inserting it into another (it's quite big and also not as well done as the example in our real app but unfortunately I can't send the source for that).
The thing I've noticed though is that in order to start dragging data I need to click to select it and then press and hold the mouse button to start dragging, whereas under W**dows and just about every other OS you can just press and hold and start dragging straight away. If you try this with a JTable though it just changes the rows you have selected so the drag and drop works but feels a bit clunky and amateurish. I'd like to do something about this such that it works like Windows Explorer (or similar) where you can just press the mouse button and start dragging.
Any help would be greatly appreciated - and if anybody finds the code useful you're more than welcome to it. Note that the business end of this is CustomTransferHandler.java - this will show you how to insert data at a specific position in a JTable, it's a bit of a faff but not too bad once you've got it sussed.
Thanks,
Bart Read
===============================================================
TestFrame.java
* TestFrame.java
* Created on October 21, 2002, 4:59 PM
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.util.TooManyListenersException;
import javax.swing.*;
* @author readb
public class TestFrame extends javax.swing.JFrame
private static final String [] NAMES = {
"John", "Geoff", "Madeleine", "Maria", "Flanders",
"Homer", "Marge", "Bart", "Lisa", "Weird Baby" };
private JTable source;
private JTable dest;
private MyTableModel sourceModel;
private MyTableModel destModel;
private Clipboard clipboard;
/** Creates a new instance of TestFrame */
public TestFrame()
clipboard = getToolkit().getSystemClipboard();
Container c = getContentPane();
c.setLayout( new BorderLayout( 40, 40 ) );
source = new MyJTable();
sourceModel = new MyTableModel();
source.setModel( sourceModel );
source.setDragEnabled( true );
CustomTransferHandler handler = new CustomTransferHandler( "Source handler" );
source.setTransferHandler( handler );
try
source.getDropTarget().addDropTargetListener( handler );
catch ( TooManyListenersException tmle )
tmle.printStackTrace();
dest = new MyJTable();
destModel = new MyTableModel();
dest.setModel( destModel );
dest.setDragEnabled( true );
handler = new CustomTransferHandler( "Dest handler" );
dest.setTransferHandler( handler );
try
dest.getDropTarget().addDropTargetListener( handler );
catch ( TooManyListenersException tmle )
tmle.printStackTrace();
c.add( new JScrollPane( source ), BorderLayout.WEST );
c.add( new JScrollPane( dest ), BorderLayout.EAST );
populate();
private void populate( MyTableModel model )
for ( int index = 0; index < NAMES.length; ++index )
model.setRow( index, new DataRow( index + 1, NAMES[ index ] ) );
private void populate()
populate( sourceModel );
populate( destModel );
public static void main( String [] args )
TestFrame app = new TestFrame();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent we )
System.exit( 0 );
app.pack();
app.setSize( 1000, 600 );
app.show();
private class MyJTable extends JTable
public boolean getScrollableTracksViewportHeight()
Component parent = getParent();
if (parent instanceof JViewport)
return parent.getHeight() > getPreferredSize().height;
return false;
}=====================================================================
MyTableModel.java
* MyTableModel.java
* Created on October 21, 2002, 4:43 PM
import java.util.ArrayList;
* @author readb
public class MyTableModel extends javax.swing.table.AbstractTableModel
private static final int NUMBER = 0;
private static final int NAME = 1;
private static final String [] COLUMN_HEADINGS = { "Number", "Name" };
private ArrayList data;
/** Creates a new instance of MyTableModel */
public MyTableModel()
super();
data = new ArrayList();
public int getColumnCount()
return COLUMN_HEADINGS.length;
public String getColumnName( int index )
return COLUMN_HEADINGS[ index ];
public Class getColumnClass( int index )
switch ( index )
case NUMBER:
return Integer.class;
case NAME:
return String.class;
default:
throw new IllegalArgumentException( "Illegal column index: " + index );
public int getRowCount()
return ( null == data ? 0 : data.size() );
public Object getValueAt( int row, int column )
DataRow dataRow = ( DataRow ) data.get( row );
switch ( column )
case NUMBER:
return new Integer( dataRow.getNumber() );
case NAME:
return dataRow.getName();
default:
throw new IllegalArgumentException( "Illegal column index: " + column );
public void addRow( DataRow row )
int rowIndex = data.size();
data.add( row );
fireTableRowsInserted( rowIndex, rowIndex );
public void addRows( DataRow [] rows )
int firstRow = data.size();
for ( int index = 0; index < rows.length; ++index )
data.add( rows[ index ] );
fireTableRowsInserted( firstRow, data.size() - 1 );
public void setRow( int index, DataRow row )
if ( index == data.size() )
data.add( row );
else
data.set( index, row );
fireTableRowsUpdated( index, index );
public void insertRows( int index, DataRow [] rows )
for ( int rowIndex = rows.length - 1; rowIndex >= 0; --rowIndex )
data.add( index, rows[ rowIndex ] );
fireTableRowsInserted( index, index + rows.length - 1 );
public DataRow getRow( int index )
return ( DataRow ) data.get( index );
public DataRow removeRow( int index )
DataRow retVal = ( DataRow ) data.remove( index );
fireTableRowsDeleted( index, index );
return retVal;
public boolean removeRow( DataRow row )
int index = data.indexOf( row );
boolean retVal = data.remove( row );
fireTableRowsDeleted( index, index );
return retVal;
public void removeRows( DataRow [] rows )
for ( int index = 0; index < rows.length; ++index )
data.remove( rows[ index ] );
fireTableDataChanged();
}=====================================================================
DataRow.java
* DataRow.java
* Created on October 21, 2002, 4:41 PM
import java.io.Serializable;
* @author readb
public class DataRow implements Serializable
private int number;
private String name;
/** Creates a new instance of DataRow */
public DataRow( int number, String name )
this.number = number;
this.name = name;
public int getNumber()
return number;
public String getName()
return name;
public String toString()
return String.valueOf( number ) + ": " + name;
}======================================================================
CustomTransferHandler.java
* CustomTransferHandler.java
* Created on October 22, 2002, 8:36 AM
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.*;
import java.awt.event.InputEvent;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.TransferHandler;
* @author readb
public class CustomTransferHandler
extends TransferHandler
implements Transferable, ClipboardOwner, DropTargetListener
public static final DataFlavor ROW_ARRAY_FLAVOR = new DataFlavor( DataRow[].class, "Multiple rows of data" );
private String name;
private ImageIcon myIcon;
private DataRow [] data;
private boolean clipboardOwner = false;
private int rowIndex = -1;
/** Creates a new instance of CustomTransferHandler */
public CustomTransferHandler( String name )
this.name = name;
public boolean canImport( JComponent comp, DataFlavor [] transferFlavors )
System.err.println( "CustomTransferHandler::canImport" );
if ( comp instanceof JTable && ( ( JTable ) comp ).getModel() instanceof MyTableModel )
for ( int index = 0; index < transferFlavors.length; ++index )
if ( ! transferFlavors[ index ].equals( ROW_ARRAY_FLAVOR ) )
return false;
return true;
else
return false;
protected Transferable createTransferable( JComponent c )
System.err.println( "CustomTransferHandler::createTransferable" );
if ( ! ( c instanceof JTable ) || ! ( ( ( JTable ) c ).getModel() instanceof MyTableModel ) )
return null;
this.data = null;
JTable table = ( JTable ) c;
MyTableModel model = ( MyTableModel ) table.getModel();
Clipboard cb = table.getToolkit().getSystemClipboard();
cb.setContents( this, this );
clipboardOwner = true;
int [] selectedRows = table.getSelectedRows();
Arrays.sort( selectedRows );
data = new DataRow[ selectedRows.length ];
for ( int index = 0; index < data.length; ++index )
data[ index ] = model.getRow( selectedRows[ index ] );
return this;
public void exportAsDrag( JComponent comp, InputEvent e, int action )
super.exportAsDrag( comp, e, action );
Clipboard cb = comp.getToolkit().getSystemClipboard();
cb.setContents( this, this );
protected void exportDone( JComponent source, Transferable data, int action )
System.err.println( "CustomTransferHandler::exportDone" );
if ( TransferHandler.MOVE == action && source instanceof JTable && ( ( JTable ) source ).getModel() instanceof MyTableModel )
JTable table = ( JTable ) source;
MyTableModel model = ( MyTableModel ) table.getModel();
int [] selected = table.getSelectedRows();
for ( int index = selected.length - 1; index >= 0; --index )
model.removeRow( selected[ index ] );
public void exportToClipboard( JComponent comp, Clipboard clip, int action )
System.err.println( "CustomTransferHandler::exportToClipboard" );
public int getSourceActions( JComponent c )
System.err.println( "CustomTransferHandler::getSourceActions" );
if ( ( c instanceof JTable ) && ( ( JTable ) c ).getModel() instanceof MyTableModel )
return MOVE;
else
return NONE;
* I've commented this out because it doesn't appear to work in any case.
* The image isn't null but as far as I can tell this method is never
* invoked.
// public Icon getVisualRepresentation( Transferable t )
// System.err.println( "CustomTransferHandler::getVisualRepresentation" );
// if ( t instanceof CustomTransferHandler )
// if ( null == myIcon )
// try
// myIcon = new ImageIcon( getClass().getClassLoader().getResource( "dragimage.gif" ) );
// catch ( Exception e )
// System.err.println( "CustomTransferHandler::getVisualRepresentation: exception loading image" );
// e.printStackTrace();
// if ( null == myIcon )
// System.err.println( "CustomTransferHandler::getVisualRepresentation: myIcon is still NULL" );
// return myIcon;
// else
// return null;
public boolean importData( JComponent comp, Transferable t )
System.err.println( "CustomTransferHandler::importData" );
super.importData( comp, t );
if ( ! ( comp instanceof JTable ) )
return false;
if ( ! ( ( ( JTable ) comp ).getModel() instanceof MyTableModel ) )
return false;
if ( clipboardOwner )
return false;
if ( !t.isDataFlavorSupported( ROW_ARRAY_FLAVOR ) )
return false;
try
data = ( DataRow [] ) t.getTransferData( ROW_ARRAY_FLAVOR );
return true;
catch ( IOException ioe )
data = null;
return false;
catch ( UnsupportedFlavorException ufe )
data = null;
return false;
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
System.err.println( "MyTransferable::getTransferData" );
if ( flavor.equals( ROW_ARRAY_FLAVOR ) )
return data;
else
throw new UnsupportedFlavorException( flavor );
public DataFlavor[] getTransferDataFlavors()
System.err.println( "MyTransferable::getTransferDataFlavors" );
DataFlavor [] flavors = new DataFlavor[ 1 ];
flavors[ 0 ] = ROW_ARRAY_FLAVOR;
return flavors;
public boolean isDataFlavorSupported( DataFlavor flavor )
System.err.println( "MyTransferable::isDataFlavorSupported" );
return flavor.equals( ROW_ARRAY_FLAVOR );
public void lostOwnership( Clipboard clipboard, Transferable transferable )
clipboardOwner = false;
/** Called while a drag operation is ongoing, when the mouse pointer enters
* the operable part of the drop site for the <code>DropTarget</code>
* registered with this listener.
* @param dtde the <code>DropTargetDragEvent</code>
public void dragEnter(DropTargetDragEvent dtde)
/** Called while a drag operation is ongoing, when the mouse pointer has
* exited the operable part of the drop site for the
* <code>DropTarget</code> registered with this listener.
* @param dte the <code>DropTargetEvent</code>
public void dragExit(DropTargetEvent dte)
/** Called when a drag operation is ongoing, while the mouse pointer is still
* over the operable part of the drop site for the <code>DropTarget</code>
* registered with this listener.
* @param dtde the <code>DropTargetDragEvent</code>
public void dragOver(DropTargetDragEvent dtde)
/** Called when the drag operation has terminated with a drop on
* the operable part of the drop site for the <code>DropTarget</code>
* registered with this listener.
* <p>
* This method is responsible for undertaking
* the transfer of the data associated with the
* gesture. The <code>DropTargetDropEvent</code>
* provides a means to obtain a <code>Transferable</code>
* object that represents the data object(s) to
* be transfered.<P>
* From this method, the <code>DropTargetListener</code>
* shall accept or reject the drop via the
* acceptDrop(int dropAction) or rejectDrop() methods of the
* <code>DropTargetDropEvent</code> parameter.
* <P>
* Subsequent to acceptDrop(), but not before,
* <code>DropTargetDropEvent</code>'s getTransferable()
* method may be invoked, and data transfer may be
* performed via the returned <code>Transferable</code>'s
* getTransferData() method.
* <P>
* At the completion of a drop, an implementation
* of this method is required to signal the success/failure
* of the drop by passing an appropriate
* <code>boolean</code> to the <code>DropTargetDropEvent</code>'s
* dropComplete(boolean success) method.
* <P>
* Note: The data transfer should be completed before the call to the
* <code>DropTargetDropEvent</code>'s dropComplete(boolean success) method.
* After that, a call to the getTransferData() method of the
* <code>Transferable</code> returned by
* <code>DropTargetDropEvent.getTransferable()</code> is guaranteed to
* succeed only if the data transfer is local; that is, only if
* <code>DropTargetDropEvent.isLocalTransfer()</code> returns
* <code>true</code>. Otherwise, the behavior of the call is
* implementation-dependent.
* <P>
* @param dtde the <code>DropTargetDropEvent</code>
public void drop(DropTargetDropEvent dtde)
System.err.println( "CustomTransferHandler::drop" );
Component c = dtde.getDropTargetContext().getDropTarget().getComponent();
if ( ! ( c instanceof JComponent ) )
dtde.rejectDrop();
return;
JComponent comp = ( JComponent ) c;
if ( ! ( c instanceof JTable ) || ! ( ( ( JTable ) c ).getModel() instanceof MyTableModel ) )
dtde.rejectDrop();
return;
dtde.acceptDrop( TransferHandler.MOVE );
// THIS is such a mess -- you can't do the following because
// getTransferable() throws an (undocumented) exception - what's that
// all about.
// Transferable t = dtde.getTransferable();
// if ( !t.isDataFlavourSupported( ROW_ARRAY_FLAVOR ) )
// dtde.rejectDrop();
// return false;
// TransferHandler handler = comp.getTransferHandler();
// if ( null == handler || ! handler.importData( comp, t ) )
// dtde.rejectDrop();
// return;
Point p = dtde.getLocation();
JTable table = ( JTable ) comp;
rowIndex = table.rowAtPoint( p );
// So you have to do this instead and use the data that's been
// stored in the data member via import data. Total mess.
if ( null == data )
dtde.rejectDrop();
return;
MyTableModel model = ( MyTableModel ) table.getModel();
if ( rowIndex == -1 )
model.addRows( data );
else
model.insertRows( rowIndex, data );
dtde.acceptDrop( TransferHandler.MOVE );
/** Called if the user has modified
* the current drop gesture.
* <P>
* @param dtde the <code>DropTargetDragEvent</code>
public void dropActionChanged(DropTargetDragEvent dtde)
}Hi again,
Well I've tried using the MouseListener / MouseMotionListener approach but it doesn't quite seem to work, although it does get the events correctly. I think the reason is that it doesn't interact correctly with the Java DnD machinery which is something that V.V hinted at. It's something that I may need to look into if / when I have more time available.
I have to say though that I haven't had any problems with scrollbars - we're making fairly heavy use of large tables and if you drag over a table with a scroll bar and move to the top or bottom then it scrolls as you would expect and allows you to drop the data where you like. For this situation I've used pretty much the same approach as for the toy example above except that I've implemented separate source and destination TransferHandlers (the source table is read-only, and it really doesn't make sense to allow people to drag from the destination table so I've essentially split the functionality of the example handler down the middle).
I'm not actually particularly in favour of messing too much with the mechanics of DnD, more because of lack of time than anything else. Guess I'll just have to put up with this for the moment. Doesn't help that DnD is so poorly documented by Sun.
Thanks for all your help.
Bart -
Drag and Drop in a JTable (ContentTable)
Hello Friends,
I am designing a tool which can be used for daily task distribution, according to time (as we setup in a outlook calendar) using JTable.
Now I am planning to use a Drag and Drop option where in the task from "one date and time" can be moved to "another date and time" i.e row/column.
E.g : Suppose the new task which is scheduled at 12:30pm on 22/03/07 has to be rescheduled at 3:00pm 26/03/07. The drag and drop should automatically recognise.
It would be greate if anyone can throw in thier ideas.. 10 DUKE points..
Thanks and Rgds,
PradeepHere's an example of drag and drop of a cell in JTable.
You can move or copy (using Ctrl) a cell to another location:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.TransferHandler;
import javax.swing.table.DefaultTableModel;
public class DnD_Demo extends JFrame {
public DnD_Demo() {
setTitle("DnD Demo (Version 3)");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(1,1));
panel.add(createTable("Table A"));
getContentPane().add(panel,BorderLayout.CENTER);
pack();
private JPanel createTable(String tableId) {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Column 0");
model.addColumn("Column 1");
model.addColumn("Column 2");
model.addColumn("Column 3");
model.addRow(new String[]{tableId+" 00", tableId+" 01", tableId+" 02", tableId+" 03"});
model.addRow(new String[]{tableId+" 10", tableId+" 11", tableId+" 12", tableId+" 13"});
model.addRow(new String[]{tableId+" 20", tableId+" 21", tableId+" 22", tableId+" 23"});
model.addRow(new String[]{tableId+" 30", tableId+" 31", tableId+" 32", tableId+" 33"});
JTable table = new JTable(model);
table.getTableHeader().setReorderingAllowed(false);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(400,100));
table.setDragEnabled(true);
table.setTransferHandler(new TableTransferHandler());
JPanel panel = new JPanel();
panel.add(scrollPane);
panel.setBorder(BorderFactory.createTitledBorder(tableId));
return panel;
public static void main(String[] args) {
new DnD_Demo().setVisible(true);
abstract class StringTransferHandler extends TransferHandler {
protected abstract String exportString(JComponent c);
protected abstract void importString(JComponent c, String str);
protected abstract void cleanup(JComponent c, boolean remove);
protected Transferable createTransferable(JComponent c) {
return new StringSelection(exportString(c));
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
public boolean importData(JComponent c, Transferable t) {
if (canImport(c, t.getTransferDataFlavors())) {
try {
String str = (String)t.getTransferData(DataFlavor.stringFlavor);
importString(c, str);
return true;
} catch (UnsupportedFlavorException ufe) {
} catch (IOException ioe) {
return false;
protected void exportDone(JComponent c, Transferable data, int action) {
cleanup(c, action == MOVE);
public boolean canImport(JComponent c, DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
if (DataFlavor.stringFlavor.equals(flavors)) {
return true;
return false;
class TableTransferHandler extends StringTransferHandler {
public JTable target;
public int row = -1;
public int col = -1;
protected String exportString(JComponent c) {
JTable table = (JTable)c;
row = table.getSelectedRow();
col = table.getSelectedColumn();
return table.getValueAt(row, col).toString();
protected void importString(JComponent c, String str) {
target = (JTable)c;
int row = target.getSelectedRow();
int col = target.getSelectedColumn();
target.getModel().setValueAt(str, row, col);
protected void cleanup(JComponent c, boolean remove) {
JTable table = (JTable)c;
if (remove)
table.getModel().setValueAt("", row, col);
Message was edited by:
Rodney_McKay -
Hi,
I'm trying to use drag and drop for adding nodes to a panel which has a JGraph component in it.
The problem is that when I add the JGraph, the panel which holds it (a JScrollPane) stops listening the drops... is there any way to solve this?
I thought that I could subclass the JGraph in order to have it manage the event, which doesn't look very good from an architectural point of view, but is the only thing I could came up with.
thank you very much!
krahdHi PlaySmile,
These features are not available in current version of Lync 2013.
From
https://support.office.com/en-us/article/Send-an-IM-a74b4cf3-1c56-413f-a22a-be19c9dcbb70?CorrelationId=d329f320-aa5e-41a3-b850-ce843912cb7c&ui=en-US&rs=en-US&ad=US
You can send a file or picture by doing one of the following:
a. Drag-and-drop the file or picture from your computer into the message window or text input area.
b. Copy and paste the file or picture from any Office program into the message window or text input area.
c. Press PrtScn on your keyboard to capture an image directly from your screen, then paste it into the message window or text input area.
Note: Your sent message will show a small representation of the file or picture. To open the file or see the full-size picture, the recipient clicks Save or Open, which transfers the file to
their computer. Also note that embedded images only show up in one to one IMs, not group conversations.
I also tested with the new client “Skype for Business”, the feature that drag and drop pictures from any browser to Skype for Business is still not available, but the feature that copy/past pictures
from browsers to Skype for Business is available.
Best regards,
Eric
Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact [email protected] -
Howdy,
I'm new at the whole drag and dropping thing...
I have a JList and users can drop mp3s on it (sorta like a playlist -- actually it is a playlist)
Now, I don't want users to drop .txt or .doc files onto the Jlist and what I have done to prevent this is the following: (Full code below)
String extension = f.getName().substring(f.getName().lastIndexOf('.')+1);
if (extension.equals("mp3")) {
listModel.addElement(f.getName());
vectorFullPath.add(f.getPath());
}I guess what I want to know is, should I be using the isDropAcceptable method to disallow dropping of non mp3 files instead of using the code above? And how would I go about using that function, properly?
class TextAreaDropSongs extends JPanel {
Vector<String> vectorFullPath;
public TextAreaDropSongs() {
vectorFullPath = new Vector<String>();
DefaultListModel listModel = new DefaultListModel();
JList jlist = new JList(listModel);
new DropTarget(jlist, new TextDropTargetListener(listModel, vectorFullPath));
this.setLayout(new BorderLayout());
this.add(new JScrollPane(jlist), "Center");
public Vector<String> getSongPaths() {
return vectorFullPath;
class TextDropTargetListener implements DropTargetListener {
DefaultListModel listModel;
Vector<String> vectorFullPath;
public TextDropTargetListener(DefaultListModel dlm, Vector<String> vec) {
listModel = dlm;
vectorFullPath = vec;
public void dragEnter(DropTargetDragEvent event) { }
public void dragExit(DropTargetEvent event) { }
public void dragOver(DropTargetDragEvent event) { }
public void dropActionChanged(DropTargetDragEvent event) {
if (!isDragAcceptable(event)) {
event.rejectDrag();
return;
public void drop(DropTargetDropEvent event) {
if (!isDropAcceptable(event)) {
event.rejectDrop();
return;
event.acceptDrop(DnDConstants.ACTION_COPY);
Transferable transferable = event.getTransferable();
DataFlavor[] flavors = transferable.getTransferDataFlavors();
for (int i = 0; i < flavors.length; i++) {
DataFlavor d = flavors;
try {
if (d.equals(DataFlavor.javaFileListFlavor)) {
java.util.List fileList = (java.util.List) transferable.getTransferData(d);
Iterator iterator = fileList.iterator();
while (iterator.hasNext()) {
File f = (File) iterator.next();
String extension = f.getName().substring(f.getName().lastIndexOf('.')+1);
if (extension.equals("mp3")) {
listModel.addElement(f.getName());
vectorFullPath.add(f.getPath());
} catch (Exception e) { }
event.dropComplete(true);
public boolean isDragAcceptable(DropTargetDragEvent event) {
return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0;
public boolean isDropAcceptable(DropTargetDropEvent event) {
return (event.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0;Im using yousendit.com
I click the download link that is emailed to me by them from the sender, then it says "downloading" and then when it's done it opens Itunes and starts playing the file.
and Im using Safari as my browser.
Thanks
Message was edited by: stephen fischer1 -
JList TransferHandler Drag and Drop -- w/Autoscroll?
Hi everyone,
Just wondering if anyone has written a TransferHandler for a JList that permits drag and drop reordering, that will also autoscroll its parent JScrollPane if dragging to a boundary? Don't want to reinvent the wheel!
Thanks.
AlexRolled my own, [can see it here|http://forums.crm.saeven.net/blog.php?b=2]
Hope it helps. -
JList drag and drop to reorder items
I like to see a implementation of a JList supporting drag and drop to reorder items. The solution has to work with any object type in the datamodel.
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class ReorderList {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ReorderList().makeUI();
public void makeUI() {
Object[] data = {"One", "Two", "Three", "Four", "Five",
"Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve"
DefaultListModel model = new DefaultListModel();
for (Object object : data) {
model.addElement(object);
JList list = new JList(model);
MouseAdapter listener = new ReorderListener(list);
list.addMouseListener(listener);
list.addMouseMotionListener(listener);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.add(new JScrollPane(list));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
class ReorderListener extends MouseAdapter {
private JList list;
private int pressIndex = 0;
private int releaseIndex = 0;
public ReorderListener(JList list) {
if (!(list.getModel() instanceof DefaultListModel)) {
throw new IllegalArgumentException("List must have a DefaultListModel");
this.list = list;
@Override
public void mousePressed(MouseEvent e) {
pressIndex = list.locationToIndex(e.getPoint());
@Override
public void mouseReleased(MouseEvent e) {
releaseIndex = list.locationToIndex(e.getPoint());
if (releaseIndex != pressIndex && releaseIndex != -1) {
reorder();
@Override
public void mouseDragged(MouseEvent e) {
mouseReleased(e);
pressIndex = releaseIndex;
private void reorder() {
DefaultListModel model = (DefaultListModel) list.getModel();
Object dragee = model.elementAt(pressIndex);
model.removeElementAt(pressIndex);
model.insertElementAt(dragee, releaseIndex);
}edit Reduced a few LoC
Edited by: Darryl.Burke -
Drag and Drop fom windowsexplorer
Hi all
we are in need of a functionality where in files from the windows explorer of windows OS has to be dragged and dropped in javafx application.I got a code which works fine in Java. It uses DropTarget, Transferable and DataFlavor classes. If any one knows how this can be integrated with javaFX, it wouhld be helpful
Thanks in Advance
Regards
AnbarasanHi
We used totally 3 classes. One is EditorDropTarget.java class and other one is teestswing which should extend the swingcomponent. Create a instance in main.fx and now we can drag and drop from windows explorer. this example will print the url in the output.using this we can show the image.
EditorDropTarget.java
* To change this template, choose Tools | Templates
* and open the template in the editor.
package dragdropinfx;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragSource;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
* @author Pradeep
public class EditorDropTarget implements DropTargetListener
protected JScrollPane pane;
protected DropTarget dropTarget;
public EditorDropTarget(JScrollPane pane)
this.pane = pane;
// Create the DropTarget and register
// it with the JEditorPane.
dropTarget = new DropTarget(pane, DnDConstants.ACTION_COPY_OR_MOVE,this, true, null);
@Override
public void dragEnter(DropTargetDragEvent dtde)
System.out.println("implements 1");
@Override
public void dragOver(DropTargetDragEvent dtde)
System.out.println("implements 2");
@Override
public void dropActionChanged(DropTargetDragEvent dtde)
System.out.println("implements 3");
@Override
public void dragExit(DropTargetEvent dte)
System.out.println("implements 4");
@Override
public void drop(DropTargetDropEvent dtde)
try
Transferable transferable = dtde.getTransferable();
if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
if(dtde.getDropAction()==DnDConstants.ACTION_LINK) System.out.println("link");
if(dtde.getDropAction()==DnDConstants.ACTION_COPY) System.out.println("copy");
if(dtde.getDropAction()==DnDConstants.ACTION_MOVE) System.out.println("move");
if(dtde.getDropAction()==DnDConstants.ACTION_COPY_OR_MOVE) System.out.println("copy or move");
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Iterator iterator = ((List)transferable.getTransferData(DataFlavor.javaFileListFlavor)).iterator();
while (iterator.hasNext())
File file = (File)iterator.next();
System.out.println(" File : >>>>>>>>>>>>>>>>>> :"+file.toString());
JLabel label = new JLabel("", new ImageIcon(file.getAbsolutePath()), JLabel.LEFT);
// new DragSource().createDefaultDragGestureRecognizer(label, DnDConstants.ACTION_COPY_OR_MOVE, new MyDragGestureListener(file));
dtde.dropComplete(true);
else
dtde.rejectDrop();
catch (Exception e)
e.printStackTrace();
System.out.println("implements 5");
TestSwing.fx
* TestSwing.fx
* Created on Mar 2, 2010, 6:30:53 PM
package dragdropinfx;
import javafx.ext.swing.SwingComponent;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
* @author Pradeep
public class TestSwing extends SwingComponent {
override function createJComponent(): JComponent {
var panel = new JPanel();
panel.setSize(4410, 4410);
panel.setBackground(new java.awt.Color(250, 123,21, 10));
var scrollPane = new JScrollPane(panel);
var target : EditorDropTarget = new EditorDropTarget(scrollPane);
return scrollPane;
Main.fx
* Main.fx
* Created on Mar 1, 2010, 6:47:55 PM
package dragdropinfx;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Rectangle;
import javafx.scene.paint.Color;
import javafx.scene.Group;
* @author Pradeep
var fileName :String ;
var image:Image = Image{
width:400
height:400
url:fileName
var imageView :ImageView = ImageView{
image: bind image
// var rect:Rectangle = Rectangle
// width:400
// height:400
// fill:Color.RED;
// onMouseEntered: function (e:MouseEvent)
// image= Image{
// width:400
// height:400
// // url: (new DragAndDrop()).getFile()
// (new DragAndDrop()).getFile()
//// onMouseExited: function (e:MouseEvent)
//// image= Image{
//// width:400
//// height:400
//var obj:SwingDropTarget = SwingDropTarget{};
//println(">>>>>>>>>>>>>{obj.content}");
var obj:TestSwing = TestSwing{};
println(">>>>>>>>>>>>>{obj}");
Stage {
title: "Application title"
width: 410
height: 410
scene: Scene {
content: [
Group{
content:[obj]
Regards
Anbaraasn -
I have never been so frustrated before in my life with any phone. I find it obnoxious as it is that I cannot simply drag and drop files (especially MP3's) straight from my PC directly into my phone, which I have been used to doing up until now. Everyone who convinced me to get the iPhone has instructed me that my frustration can be fixed by downloading iTunes and syncing it all up via that program (which I have never used before). So, I downloaded the program successfully, however when I connect the iPhone 4 to the PC and iTunes is open, I get an error message that 'iTunes cannot read the content of the iPhone "iPhone" and that I should go to the Preferences tab of the iPhone and select 'restore' to restore this phone to factory settings. First of all, I don't understand why I need to do that. I have already downloaded apps and other important things in the 2 days that I have the phone. I am also scared that it will erase my contacts. This is such a headache. Music is very imporatant to me, but I am getting so frustrated that I don't have freedom over the phone which I thought was supposed to be one of the best out there. I would really appreciate help in this matter. I am sure the phone is great but I am on the verge of taking it back and getting something else.
Hey joshuafromisr,
If you resintall iTunes, it should fix the issue. The following document will go over how to remove iTunes fully and then reinstall. Depending on what version of Windows you're running you'll either follow the directions here:
Removing and Reinstalling iTunes, QuickTime, and other software components for Windows XP
http://support.apple.com/kb/HT1925
or here:
Removing and reinstalling iTunes, QuickTime, and other software components for Windows Vista or Windows 7
http://support.apple.com/kb/HT1923
Best,
David -
When I drag and drop a website icon from the Forefox address bar to the desk top, the short cut is created but the icon that appears is the firefox Icon. I want to disply the icon from the website that the short cut refers to. I have checked all I can think of in my computer to no avail.
You have to assign the favicon yourself to the desktop shortcut (right-click the shortcut: Properties) after you have dragged the link to the desktop.
You can usually find the favicon in Tools >Page Info > Media and save the icon there.
Otherwise use the main domain of the website and add favicon.ico (e.g. mozilla.com/favicon.ico ) to display the favicon in a tab and save that image to a folder. -
Hi, Im not a frequent forum poster, as most of my questions can be found already answered on them!
This is a question Ive had for a long time and it amazes me that no-one else seems to ask it. I check at each OS upgrade but its never there...
Is there any way of dragging and dropping an iCal event showing in week view across to a date in the left sidebar monthly calendar?
I was able to do this years ago in MS Outlook, and utilized it all the time when I needed to push things back, now I have to open the event and select an new date in the drop-down calendar for each & every event I want to move to a new month at the end of the month.
If its definitely not possible, how to you ask apple to consider including it - it doesnt seem like a particularly difficult task.
Thankyou
Andrew.Andrew,
Is there any way of dragging and dropping an iCal event showing in week view across to a date in the left sidebar monthly calendar?
No, but you can use cut/paste. Cut (⌘X) the event, then click on the week where you want to move the event, and Paste (⌘V).
If you have a suggestion for Apple to change that method use: Apple - Mac OS X - Feedback. -
Why does not drag and drop work?!
Hello,
I am trying to implent a drag and drop from a table to an icon representing a trash.
The drop handler fails in converting the selected rows to a list:
com.sun.el.MethodExpressionImpl@87d9c00d javax.el.ELException: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.List
Could you help me to understand why? Below are the details.
This is the af:table:
<af:table var="row" rowBandingInterval="0" id="t1"
value="#{bindings.MyView1.collectionModel}"
rowSelection="multiple"
columnStretching="last"
horizontalGridVisible="false"
verticalGridVisible="false" fetchSize="-1"
autoHeightRows="6" width="190"
disableColumnReordering="true">
<af:column sortable="true" headerText="Entry" id="c1"
align="start">
<af:outputText value="#{row.Description}" id="ot1"/>
</af:column>
<af:dragSource actions="MOVE" defaultAction="MOVE"
discriminant="delete"/>
</af:table>
This is the drop area:
<af:image source="Images/empty_trash_32.png" id="i2">
<af:dropTarget dropListener="#{backingBeanScope.DropHandlerBean.dropHandler}"
actions="MOVE">
<af:dataFlavor flavorClass="org.apache.myfaces.trinidad.model.RowKeySet"
discriminant="delete"/>
</af:dropTarget>
</af:image>
This is the failing listener listener (the failing point is bold):
public DnDAction dropHandler(DropEvent dropEvent) {
DnDAction dnda = DnDAction.NONE;
if (dropEvent.getProposedAction() == DnDAction.MOVE) { // delete
RichTable table = (RichTable)dropEvent.getDragComponent();
//determine the rows that are dragged over
Transferable t = dropEvent.getTransferable();
//when looking for data, use the same discriminator as defined
//on the drag source
DataFlavor<RowKeySet> df =
DataFlavor.getDataFlavor(RowKeySet.class, "delete");
RowKeySet rks = t.getData(df);
if (rks == null) {
return DnDAction.NONE;
Iterator iter = rks.iterator();
while (iter.hasNext()) {
//get next selected row key
System.out.println(rks.toArray().length); // the number of selected rows is ok
List key = (List)iter.next(); // here gives: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.List
//make row current so we can access it
table.setRowKey(key);
//the table model represents its row by the ADF binding class,
//which is JUCtrlHierNodeBinding
JUCtrlHierNodeBinding rowBinding =
(JUCtrlHierNodeBinding)table.getRowData();
Row row = (Row)rowBinding.getRow();
//delete row;
row.remove();
//activate animation
dnda = DnDAction.MOVE;
return dnda;
thanks.I did try, I obtained this:
java.lang.NullPointerException
Why NullPointerException?
I don't know if this helps, but consider that the collection model comes from a ViewObject built on three EOs with many fields, although the table only shows one column.
This is the Iterator in my pageDef:
<table IterBinding="MyView1Iterator" id="MyView1">
<AttrNames>
<Item Value="Cod1"/>
<Item Value="Cod2"/>
<Item Value="Cod3"/>
<Item Value="Cod4"/>
<Item Value="Description"/>
<Item Value="Cod5"/>
</AttrNames>
</table>
Any idea?
I will see the Key content with the debugger. -
Did my first back up today using external hard drive and time machine now i can't drag and drop
Hi, i did my first back up today using time machine it all went onto my external hard drive fine. Now i cant drag and drop anyhting. I assume ive cahnged some settings in time machine but cant figure it out what to do can some one help ?
thanksBrandbasher wrote:
Thanks Pondini but i have closed time machine, removed external hard drive.
Did you eject it first?
Now i cant drag and drop anything on my desk top, or mail or any other application. Ive tried moving folders, documents none of it works. Even moving around documents within a folder, it wont let me chnage the position of files.
That shouldn't be related to Time Machine (especially if the backups aren't mounted).
What happens when you try those things? Do you get any messages? Anything you can post a screenshot of?
Have you tried a Restart?
Does it happen in another user account? (If you don't have one, create one via System Prefs > Users & Groups.) -
Drag and Drop (re-order) Thumbnails in Organizer
I am using Photoshop Elements version 5.0.2
I would like to re-order pictures in an order that will make sense for me in my business. I suppose I can go through each pix and change the time on them, so I can then sort by time stamp.
Is there an easier way to do this? I was hopeful that I could drag and drop them in Thumbnail view - but I cannot.
Thank you,
Jamie>Is there anyway to delete the photos in the main well, without losing them from my collection?
As I understand the design, the main well is intended to be all the photos that you are managing with Photoshop Elements.
Collections are used to display a specific group of those photos in your chosen sequence for any given activity.
I suspect that since you are using a consumer product such as Photoshop Elements for your business purpose, you may need to make some compromises like having a default (the main photo well) display sequence which you see first when starting PSE that is not what you would choose.
This is not bad if PSE does what you want - just additional steps to switch to the Collection view and also to maintain (drag and drop) the sequencing of the collection when you add additional photo files to a Collection.
Maybe you are looking for
-
I can't host a 3 person video conference (the other 2 are on pc's). I have iSight with 5000+kps cable lan connection. I have my QuickTime Streaming prefs set on Intranet.LAN. iChat video is set on no bandwidth limit. Help, Fitz Dual 2.0 G5 Mac OS X
-
I am starting to test software center and when I publish Packages I do not get the option for Categories or the option to choose if it requires Approval or not. Is this possible or to get those features do you have to create applications?
-
Question about /var/lock/subsys/dbora
Hello, I've been having a problem where ./dbora stop is not completely shutting down the database. I've done some debigging and discovered that this is because there is no /var/lock/subsys/dbora file. I've seen this file created in a lot of sample db
-
Unable to sync using PS CC 2014! Sync says I'm not connected!!!
I was just in ps cc 2014 and decided to run sync to uplead recents changes I've made in PS. However the sync menu says I'm not connected even tho the cloud app says I am. any help would be appreciated. TIA
-
Simple app with UiWebView crashes
This might not be the right forum, but I have an application that contains a UiWebView. When I do a relatively long ajax request, the app crashes: {"bug_type":"110","os_version":"iOS 8.2 (12D508)"} Incident Identifier: F7F28AE5-2B7A-4CEE-8805-8FEA6F6