2012-05-24 3 views
2

Я пытаюсь понять, как сделать желтый круг вокруг курсора в Java. Дело в том, что у нас есть экран-рекордер, который (очевидно) записывает экран. Использование ключевых слов «Желтый круг вокруг курсора в Java» в Google позволяет мне только добавить желтый круг вокруг курсора на MAC, в WM и других приложениях, но не в том, как это сделать в Java на компьютере пользователя, когда запускается приложение.Желтый круг вокруг курсора в Java

Как я могу это сделать без использования существующих изображений? Рисование простого желтого круга с некоторой непрозрачностью было бы самым простым способом сделать это, следуя за мышью на экране. А также, если можно заставить его исчезнуть и снова появиться, когда пользователь нажмет кнопку мыши, это будет потрясающе.

+0

Вы слышали о 'Swings'? – Subs

+0

@ michael667 Ну, так как я не могу найти ничего, кроме как изменить фактический курсор, довольно сложно попробовать что-то сделать. Я не нашел реальных примеров или теорий о том, как это сделать. И мое знание JAVA не так продвинуто. Обычно я разрабатываю веб-сайты. –

+0

@Subs Если вы имеете в виду Swing, то да, хотя я не уверен, как это поможет мне выяснить, какой класс использовать, чтобы сделать курсор более заметным. Дело в том, что библиотека java swing является огромной. Я имею в виду, довольно легко найти слушателей-мышей. Но сложнее понять, как сделать круг вокруг мыши. –

ответ

-1

Невозможно добавить круг вокруг существующего указателя мыши. Вы можете установить указатель мыши только на полное изображение.

+0

Спасибо за ваш ответ, но я боюсь, что это не решение. Если бы я нашел ответ во время поиска, я бы не спросил здесь. Проблема в том, что я не хочу полностью менять курсор мыши. Я просто хочу создать вокруг него желтый круг. И мой вопрос был, если это возможно без использования изображений. –

+1

Невозможно добавить круг вокруг существующего указателя мыши.Вы можете установить указатель мыши только на полное изображение. – michael667

+0

Получил это. Спасибо за ответ. Я отвечу на ваш ответ в качестве ответа на этот вопрос, так как я не думаю, что можно отмечать комментарии как принятые ответы. –

2

Это можно сделать, добавив MouseMotionListener к вашему компоненту, но это займет немного работы, чтобы заставить его работать именно так, как вы этого хотите.

Я хотел бы начать с чего-то вроде этого:

private static final double RADIUS = 15.0; 
private static final double DIAMETER = 2.0 * RADIUS; 
private static final Color XOR_COLOR = Color.yellow; 

private static Shape m_circle = null; 

@Override 
public void mouseMoved(MouseEvent e) 
{ 
    Graphics2D g2  = (Graphics2D) getGraphics(); 
    Point  p  = e.getPoint(); 
    Shape  circle = new Ellipse2D.Double(p.getX() - RADIUS, p.getY() - RADIUS, DIAMETER, DIAMETER); 

    clearCircle(g2); 

    g2.setXORMode(XOR_COLOR); 
    g2.draw(circle); 
    g2.setPaintMode(); 

    m_circle = circle; 
} 

private void clearCircle(Graphics2D g2) 
{ 
    if (m_circle != null) 
    { 
     g2.setXORMode(XOR_COLOR); 
     g2.draw(m_circle); 
     g2.setPaintMode(); 

     m_circle = null; 
    } 
} 

Он также будет необходимо убедиться, что старый круг очищается от события mouseExited, которые вы можете слушать, добавив MouseListener. Это также имеет события mousePressed/mouseReleased/mouseClicked, которые вам необходимы для его исчезновения/повторного появления при щелчке мыши пользователя.

Использование XOR удобно, потому что очень просто восстановить экран, перекрасив ту же форму с тем же цветом и стилем, но это не совсем то, о чем вы просили. Можно отремонтировать экран, захватив изображение области, в которую вы собираетесь нарисовать круг. Круг можно удалить с экрана, перекрасив поврежденную область, прежде чем рисовать круг в новом положении.

+0

'getGraphics()' откуда оно взялось? –

+0

можете ли вы опубликовать полный рабочий пример? Я что-то пробовал, но это не сработало. –

+0

getGraphics() первоначально поставляется из java.awt.Component, но этот код нуждается в подклассе, который возвращает экземпляр Graphics2D, например javax.swing.JComponent – richj