final Button button = new Button(composite, SWT.NONE);
final Point[] offset = new Point [1];
button.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(final MouseEvent e) {
if (offset[0] != null) {
Point pt = offset[0];
button.setLocation(e.x - pt.x, e.y - pt.y);
}
}
});
button.addMouseListener(new MouseAdapter() {
public void mouseDown(final MouseEvent e) {
offset[0] = new Point(e.x - button.getLocation().x, e.y - button.getLocation().y);

}
public void mouseUp(final MouseEvent e) {
offset[0] = null;
}
});我想用上面的代码实现按钮拖拽,但是实现的效果是按钮实际的移动总是比鼠标慢,并且偶尔闪烁,该怎么解决?

解决方案 »

  1.   

    public class DragTest { 
    JFrame mainFrame; 
    JPanel mainPanel; 
    JButton bt1;  public DragTest() { 
    mainFrame = new JFrame(); 
    mainPanel = new JPanel(null); 
    bt1 = new JButton("Button1"); 
    bt1.setBounds(10,10,10,10);bt1.setTransferHandler(new TransferHandler("text")); 
    bt1.addMouseListener(new MouseAdapter() { 
    public void mousePressed(MouseEvent e) { 
    JComponent c = (JComponent) e.getSource(); 
    TransferHandler handler = c.getTransferHandler(); 
    handler.exportAsDrag(c, e, TransferHandler.COPY); 

    }public void mouseReleased(MouseEvent e){
    //在这里处理button的setBounds
    }
    ); mainPanel.add(bt1, BorderLayout.PAGE_START); 
    mainFrame.getContentPane().add(mainPanel); 
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainFrame.pack(); 
    mainFrame.setLocationRelativeTo(null); 
    mainFrame.setVisible(true); 
    } public static void main(String[] args) { 
    new DragTest(); 

    }
      

  2.   

    这个,我有js写得,需要的话加我Q 397764284给你