Cercul galben în jurul cursorului din Java

Încerc să-mi dau seama cum să faci un cerc galben în jurul cursorului din Java. Chestia e că avem un recorder care (evident) înregistrează ecranul. Utilizarea cuvintelor cheie "Cercul galben în jurul cursorului în Java" pe Google mă duce doar la modul de a adăuga un cerc galben în jurul cursorului pe un MAC, pe WM și alte aplicații, dar nu cum se face în Java pe un computer utilizator atunci când aplicația începe.

Cum pot să o fac fără să utilizez imaginile existente? Desenarea unui cerc galben simplu, cu o oarecare opacitate, ar fi cel mai simplu lucru de făcut, făcându-l să urmeze mouse-ul pe ecran. Și, de asemenea, dacă este posibil să se facă să dispară și să apară din nou atunci când utilizatorul face clic pe un buton al mouse-ului, asta ar fi minunat.

0
ați găsit o soluție?
adăugat autor coding_idiot, sursa
@ michael667 Ei bine, din moment ce nu pot găsi altceva decât modul de a schimba cursorul real, este destul de greu să încerci să faci ceva. Nu am gasit nici un exemplu sau teorii adevarate despre cum sa o fac. Și cunoștințele mele despre JAVA nu sunt atât de avansate. Dezvolt de obicei site-uri web.
adăugat autor Nemo Caligo, sursa
@Subs Dacă vrei să spui Swing, atunci da, chiar dacă nu sunt sigur cum să mă ajute să dau seama ce clasă să folosească pentru a face cursorul mai vizibil. Lucrul este biblioteca java swing este cam imensă. Adică, este destul de ușor să găsești ascultătorii mouse-ului. Dar e mai greu să dai seama cum să faci un cerc în jurul mouse-ului.
adăugat autor Nemo Caligo, sursa
@Sub, Adevărat, totuși, încă nu sunt sigur cum să facă panoul ăsta să urmeze mereu mouse-ul. De asemenea, nu sunt sigur dacă ar putea funcționa ca în JavaScript, să faceți un eveniment mouseMove și să schimbați poziția x | y a panoului respectiv, să obțineți coordonatele x | y ale mouse-ului și să faceți panourile centrale în poziția x | y lipiți de poziția x | y a mouse-ului. În cazul în care funcționează, ar fi prea solicitantă pe computerul care utilizează aplicația sau nu ar fi utilizatorul care utilizează notificarea aplicației întârzieri? Toate acestea sunt teorii și, chiar dacă știu cum
adăugat autor Nemo Caligo, sursa
Da, verificați răspunsul de mai jos. Acesta a fost cel mai simplu mod de a face acest lucru.
adăugat autor Nemo Caligo, sursa
Ați auzit despre Swings ?
adăugat autor Subs, sursa
@NanashiDri, dacă știți atunci ar trebui să fi dat seama că puteți pune un panou transparent ca strat superior și trageți un cerc de la poziția cursorului mouse-ului și când faceți clic pe ( mousePress ) - ascundeți astfel încât acum panoul din spate (principalul) să primească evenimentul mousereleased .
adăugat autor Subs, sursa

2 răspunsuri

Nu este posibil să adăugați un cerc în jurul indicatorului mouse-ului existent. Puteți să setați cursorul mouse-ului doar la o imagine completă.

0
adăugat
Vă mulțumim pentru răspunsul dvs., dar mă tem că nu este soluția. Dacă aș găsi un răspuns în timp ce căutam, n-aș fi întrebat aici. Problema este că nu vreau să schimb complet cursorul mouse-ului. Vreau doar să creez un cerc galben în jurul lui. Și întrebarea mea a fost dacă acest lucru este posibil fără a folosi imagini.
adăugat autor Nemo Caligo, sursa
Am înţeles. Multumesc pentru raspuns. Voi marca răspunsul dvs. ca răspuns la această întrebare, deoarece nu cred că este posibil să marchezi comentarii ca răspunsuri acceptate.
adăugat autor Nemo Caligo, sursa
Nu este posibil să adăugați un cerc în jurul indicatorului mouse-ului existent. Puteți să setați cursorul mouse-ului doar la o imagine completă.
adăugat autor michael667, sursa

Este posibil să faceți acest lucru prin atașarea unui MouseMotionListener la componenta dvs., dar va fi nevoie de puțină muncă pentru ca aceasta să funcționeze exact așa cum doriți.

Aș începe de la așa ceva:

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;
    }
}

Va fi, de asemenea, necesar să vă asigurați că cercul vechi este șters la evenimentul mouse-ul Exit, pe care îl puteți asculta prin adăugarea unui MouseListener. Acest lucru are, de asemenea, mousePressed/mouseReleased/mouseClicked evenimente care aveți nevoie pentru a face să dispară/reapare pe un click de mouse-ul unui utilizator.

Utilizarea XOR este convenabilă deoarece este foarte ușor să restabiliți ecranul prin repetarea aceleiași forme cu aceeași culoare și stil, dar nu este exact ceea ce ați cerut. Este posibil să reparați ecranul prin captarea unei imagini a zonei pe care urmează să o desenați. Cercul poate fi scos din ecran prin revopsirea zonei deteriorate înainte de a picta un cerc într-o nouă poziție.

0
adăugat
getGraphics() de unde provine?
adăugat autor coding_idiot, sursa
poți posta un exemplu de lucru complet? Am încercat ceva, dar nu a mers.
adăugat autor coding_idiot, sursa
getGraphics() provine inițial din java.awt.Component dar acest cod are nevoie de o subclasă care returnează o instanță Graphics2D, cum ar fi javax.swing.JComponent
adăugat autor richj, sursa
Codul din răspunsul meu este doar implementarea mouseMoved (...) pentru o clasă care implementează MouseMotionListener. Dacă aveți nevoie de un exemplu complet de exemplu Java, acest tutorial Java oferă un bun punct de plecare: docs.oracle.com/javase/tutorial/uiswing/events/… - ar trebui să puteți înlocui punerea în aplicare a mouseMoved cu codul meu.
adăugat autor richj, sursa