Tem como arrastar um componente (sentido horizontal) com o mouse(um JLabel, por exemplo)?
Tentei várias vezes, pegando as propriedades getBounds().x, no evento mouseMoved e mais um monte de somatórios com getX(), etc…
O máximo que consegui foi fazer o JLabel andar alguns milímetros, arrastando com o mouse. Sei que fiz tudo errado.
Tem como arrastar um componente (sentido horizontal) com o mouse(um JLabel, por exemplo)?
Tentei várias vezes, pegando as propriedades getBounds().x, no evento mouseMoved e mais um monte de somatórios com getX(), etc...
O máximo que consegui foi fazer o JLabel andar alguns milímetros, arrastando com o mouse. Sei que fiz tudo errado.
Alguém conseguiu sucesso nisto?
Obrigado a todos
label.setLocation( evt.getX(), 0 ); //foi o que ficou melhor ainda que um péssimo resultado
Não sei se é exatamente isso o que vc quer , mas vale a pena dar uma olhada neste código ae. :idea:
/* * LabelDnD.java is a 1.4 example that requires no other files. */importjava.awt.GridLayout;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.BorderFactory;importjavax.swing.JComponent;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.SwingConstants;importjavax.swing.TransferHandler;importjavax.swing.border.TitledBorder;publicclassLabelDnDextendsJPanel{JTextFieldtextField;JLabellabel;publicLabelDnD(){super(newGridLayout(2,1));textField=newJTextField(40);textField.setDragEnabled(true);JPaneltfpanel=newJPanel(newGridLayout(1,1));TitledBordert1=BorderFactory.createTitledBorder("JTextField: drag and drop is enabled");tfpanel.add(textField);tfpanel.setBorder(t1);label=newJLabel("I'm a Label!",SwingConstants.LEADING);label.setTransferHandler(newTransferHandler("text"));MouseListenerlistener=newDragMouseAdapter();label.addMouseListener(listener);JPanellpanel=newJPanel(newGridLayout(1,1));TitledBordert2=BorderFactory.createTitledBorder("JLabel: drag from or drop to this label");lpanel.add(label);lpanel.setBorder(t2);add(tfpanel);add(lpanel);setBorder(BorderFactory.createEmptyBorder(5,5,5,5));}privateclassDragMouseAdapterextendsMouseAdapter{publicvoidmousePressed(MouseEvente){JComponentc=(JComponent)e.getSource();TransferHandlerhandler=c.getTransferHandler();handler.exportAsDrag(c,e,TransferHandler.COPY);}}/** * Create the GUI and show it. For thread safety, this method should be * invoked from the event-dispatching thread. */privatestaticvoidcreateAndShowGUI(){//Make sure we have nice window decorations.JFrame.setDefaultLookAndFeelDecorated(true);//Create and set up the window.JFrameframe=newJFrame("LabelDnD");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Create and set up the content pane.JComponentnewContentPane=newLabelDnD();newContentPane.setOpaque(true);//content panes must be opaqueframe.setContentPane(newContentPane);//Display the window.frame.pack();frame.setVisible(true);}publicstaticvoidmain(String[]args){//Schedule a job for the event-dispatching thread://creating and showing this application's GUI.javax.swing.SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){createAndShowGUI();}});}}
Um abraço !
knik
Valeu amigo,
Mas eu mesmo consegui resolver o que eu queria. Fiz assim:
private void labelMouseDragged(java.awt.event.MouseEvent evt){
label.setLocation( (evt.getX() + label.getBounds().x) - 10/2, 0 );
}
Sendo que 10 é a propriedade width do label. Assim ficou do jeito que eu queria. E pensar que isto no VB levava várias linhas de código…
bb1
vou precisar dessas tecnicas logo logo no meu projeto lah na empresa., tomara contar com vcs pra me ajudarem.,
mt interessante esse codigo xtreme