作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这就是我想要做的,我想让一个面板在单击它后跟随光标,我最初的想法是通过拖放操作来完成它,但问题是必须按下 clic 才能让面板被拖动,我希望只需单击面板即可拖动面板,而无需按住 clic。有任何想法吗?谢谢大家:)
public class Main {
public static void main(String[] argv) throws Exception {
JComponent panDrag = new DraggableComponent();
Icon newi = new ImageIcon("src/red.png");
JLabel labelImage = new JLabel(newi);
panDrag.add(labelImage);
JPanel panneau = new JPanel();
panneau.add(panDrag);
JFrame f = new JFrame();
f.add(panneau);
f.setSize(300, 300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class DraggableComponent extends JPanel implements DragGestureListener, DragSourceListener, MouseListener {
DragSource dragSource;
public DraggableComponent() {
dragSource = new DragSource();
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
this.setBackground(new Color(255, 0, 0));
this.addMouseListener(this);
}
public void dragGestureRecognized(DragGestureEvent evt) {
Transferable t = new StringSelection("aString");
dragSource.startDrag(evt, DragSource.DefaultCopyDrop, t, this);
}
public void dragEnter(DragSourceDragEvent evt) {
System.out.println("enters");
}
final JButton clickTwiceButton = new JButton();
final JButton fireEventButton = new JButton();
public void dragOver(DragSourceDragEvent evt) {
System.out.println("over" + evt.getX() + "-" + evt.getY());
this.setLocation(evt.getX() - 50, evt.getY() - 70);
}
public void dragExit(DragSourceEvent evt) {
System.out.println("leaves");
}
public void dropActionChanged(DragSourceDragEvent evt) {
System.out.println("changes the drag action between copy or move");
}
public void dragDropEnd(DragSourceDropEvent evt) {
System.out.println("finishes or cancels the drag operation");
// Invoking later for no reason, just to simulate your code
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("sdffdf");
clickTwiceButton.dispatchEvent(new MouseEvent(
fireEventButton,
MouseEvent.MOUSE_CLICKED,
1,
MouseEvent.BUTTON1,
0, 0,
1,
true
));
}
});
}
//******************
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("mouse clic");
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("mouse enter");
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("mouse exit");
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("mouse press");
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("mouse release");
//MouseEvent press = new MouseEvent(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
//this.mousePressed(press );
}
}
有了这个,我只能拖动面板并使其保持可见,这也是我需要的,但我仍然必须按住我不想要的 clic :(
最佳答案
我可能会更容易为您自己的拖动监听器。
您可以从 Moving Windows 中找到的 DragListener
开始博客。
您需要修改代码来处理 mouseMoved(...)
事件而不是 mouseDragged(...)
事件。您可能需要添加一个“拖动”变量,以便在生成 mousePressed(...)
事件时切换该变量。第一次单击会将拖动变量设置为“true”,第二次单击会将变量设置为“false”。那么 mouseMoved(...)
代码只会在变量为“true”时执行。
关于java - 让 JPanel 只需单击鼠标即可跟随光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691469/
这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。 问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。 @Co
我是一名优秀的程序员,十分优秀!