通过在java applet中显示调整大小光标,可以重置自定义光标

时间:2018-01-11 13:04:30

标签: java applet awt

我必须通过添加自定义光标来更新旧版Java小程序,该光标在将鼠标移动到Panel的某些区域时出现。我已经完成了它并且它可以工作,除了如果光标位置移动到我的面板的左边或底部(显示调整大小箭头光标)然后移动到自定义光标区域,如果光标快速移动则显示自定义光标,但如果移动缓慢,则会显示默认光标。

如果我使用预定义的游标,问题就会消失,但不幸的是我需要一个移动光标,这是在Mac上运行的,通常的移动光标不可用。

有什么想法吗?下面的示例代码,虽然您需要获取自己的光标png文件 - 像这样的人https://i.stack.imgur.com/gJmeJ.png(感谢@Andrew Thompson)

Runner.java:

import java.applet.Applet;
import java.awt.Frame;
import java.awt.Panel;

public class Runner extends Applet
{

    public void init()
    {
        //Create and set up the window.
        Panel testpanel = new TestPanel();

        Frame frame = new Frame();
        frame.add(testpanel);
        frame.pack();
        frame.setVisible(true);
    }
}

TestPanel.java:

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class TestPanel extends Panel
    implements MouseMotionListener, MouseListener 
{
  private Cursor dragCursor;

  public TestPanel()
  {
    setPreferredSize(new Dimension(500, 200));

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("dragcursor.png");
    dragCursor = toolkit.createCustomCursor(image ,new Point(16, 16), "img");

    addMouseMotionListener(this);

    addMouseListener(this);

  }

  @Override
  public void mouseEntered(MouseEvent evt)
  {
  }

  @Override
  public void mouseExited(MouseEvent evt)
  {
  }

  @Override
  public void mouseClicked(MouseEvent evt)
  {
    if (evt.getX() > 0 && evt.getX() < 300 && evt.getY() > 0
        && evt.getY() < 300)
    {
      // display drag cursor at mouse position
      this.getParent().setCursor(dragCursor);
    }
    else
    {
      // reset cursor
      this.getParent()
          .setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
  }

  @Override
  public void mouseMoved(MouseEvent evt)
  {
    if (evt.getX() > 0 && evt.getX() < 300 && evt.getY() > 0
        && evt.getY() < 300)
    {
      // display drag cursor at mouse position
      this.getParent().setCursor(dragCursor);
    }
    else
    {
      // reset cursor
      this.getParent()
          .setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
  }

  @Override
  public void mousePressed(MouseEvent evt)
  {
  }

  @Override
  public void mouseReleased(MouseEvent evt)
  {
  }

  @Override
  public void mouseDragged(MouseEvent evt)
  {
  }

  @Override
  public void paint(Graphics g)
  {
    g.setColor(Color.red);
    g.drawRect(0, 0, 300, 300);
  }
}

0 个答案:

没有答案