Hi Roger,
I checked out that I have to change to non-native to get my LocalManifest to be 
used.  And for this, I wonder why the RemoteManifest doesn't have containsValue 
implemented.  
I also changed the action to MOVE but not sure what the difference is.  
For the column index calculation, I found out that the mouse point returned 
from DragBegin and Drop is different.  the Drop return the ancestor's location 
while DragBegin returns table view location.  Should be this a bug?
Thanks,
Brendan

Subject: Re: Use Drag and Drop in TableView Header
From: [email protected]
Date: Thu, 6 Dec 2012 09:42:59 -0800
To: [email protected]

Hi Brendan,   My guess would be that you are putting the column back in the 
same place that it was. I would check indexes and things in the end drop 
method. Without analyzing the code in detail that would be the first thing I 
would check.    If that is not the case (the indexes are all what you expect) 
then I would make sure that all the proper methods are being called at the 
right time.    After that, you will have to do some old-fashioned debugging on 
it. Do you have a Java debugger setup (like Eclipse or NetBeans or jswat)?
   On first examination it seems like most everything is correct, so it's 
probably something pretty simple. 
HTH,~Roger Whitcomb

Sent from my iPhone
On Dec 6, 2012, at 4:44 AM, Brendan cheng <[email protected]> wrote:




Hi,
I tried to implement a drag and drop function on column of table view header.  
I followed an example of Demo and coded as followed but nothing happened.  
Could you give me some advice on my code?
Brendan
Here is:                primaryHeader.setDragSource(new DragSource() {


                        private LocalManifest content = null;


                        @Override
                        public boolean beginDrag(Component component, int x, 
int y) {
                                int columnIndex = 
primaryHeader.getTableView().getColumnAt(x);
                                Column column = primaryHeader.getTableView()
                                                .getColumns().get(columnIndex);
                                if (column != null) {
                                        content = new LocalManifest();
                                        dragDropKey = column.getName();
                                        content.putValue(dragDropKey, column);
                                }


                                return (content != null);
                        }


                        @Override
                        public void endDrag(Component component, DropAction 
dropAction) {
                                content = null;


                        }


                        @Override
                        public boolean isNative() {
                                return true;
                        }


                        @Override
                        public LocalManifest getContent() {
                                return content;
                        }


                        @Override
                        public Visual getRepresentation() {
                                // TODO Auto-generated method stub
                                return null;
                        }


                        @Override
                        public Point getOffset() {
                                // TODO Auto-generated method stub
                                return null;
                        }


                        @Override
                        public int getSupportedDropActions() {
                                return DropAction.COPY.getMask();
                        }
                });


                primaryHeader.setDropTarget(new DropTarget() {
                        @Override
                        public DropAction dragEnter(Component component,
                                        Manifest dragContent, int 
supportedDropActions,
                                        DropAction userDropAction) {
                                DropAction dropAction = null;


                                if (dragContent.containsValue(dragDropKey)
                                                && 
DropAction.COPY.isSelected(supportedDropActions)) {
                                        dropAction = DropAction.COPY;
                                }


                                return dropAction;
                        }


                        @Override
                        public void dragExit(Component component) {
                                // empty block
                        }


                        @Override
                        public DropAction dragMove(Component component,
                                        Manifest dragContent, int 
supportedDropActions, int x,
                                        int y, DropAction userDropAction) {
                                return (dragContent.containsValue(dragDropKey) 
? DropAction.COPY : null);
                        }


                        @Override
                        public DropAction userDropActionChange(Component 
component,
                                        Manifest dragContent, int 
supportedDropActions, int x,
                                        int y, DropAction userDropAction) {
                                return (dragContent.containsValue(dragDropKey) 
? DropAction.COPY : null);
                        }


                        @Override
                        public DropAction drop(Component component, Manifest 
dragContent,
                                        int supportedDropActions, int x, int y,
                                        DropAction userDropAction) {
                                DropAction dropAction = null;
                                int columnIndex = 
primaryHeader.getTableView().getColumnAt(x);
                                if (dragContent.containsValue(dragDropKey)) {
                                        try {
                                                primaryHeader
                                                                .getTableView()
                                                                
.getColumnSource()
                                                                .getColumns()
                                                                
.remove((Column) dragContent
                                                                                
.getValue(dragDropKey));
                                                primaryHeader
                                                                .getTableView()
                                                                
.getColumnSource()
                                                                .getColumns()
                                                                
.insert((Column) dragContent
                                                                                
.getValue(dragDropKey), columnIndex);
                                                dropAction = DropAction.COPY;
                                        } catch (IOException exception) {
                                                System.err.println(exception);
                                        }
                                }


                                dragExit(component);


                                return dropAction;
                        }
                });
                                          
                                          

Reply via email to