MouseMoved

Status
Nicht offen für weitere Antworten.
S

Souji

Gast
Ok ich versuche eine art MouseOver zu schaffen die mir ein Fenster öffnet in denen bestimmte informationen angezeigt werden...ich habe mitlerweile einiges dazu ausprobiert und dieses ist bis jetzt das am besten funktionierende
Code:
    private void jList1MouseMoved(java.awt.event.MouseEvent evt) {                                  

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
    public void run() {
        if(jList1.getMousePosition(true)!=null){
        wi.dispose();
        ComponentDetailPanel wo=new  ComponentDetailPanel(wi,(Component)comList1.get(jList1.locationToIndex(jList1.getMousePosition())));
        wi.setLocation(jList1.getMousePosition());
        wi.getContentPane().add(wo); 
        wi.getContentPane().validate(); 
        wi.pack();
        wi.setVisible(true);
        wi.setBackground(new java.awt.Color(0, 0, 0));
        wi.setResizable(false);
        wi.setForeground(new java.awt.Color(0,0,0));
        }
        }
    }, 5000);
    
        
    
    }
Jedoch habe ich hier das Problem das das Frame zu oft und zu schnell erzeugt wird, selbst wenn man die mouse nicht bewegt(brauch se net ma anfassen ^^), der Timer hilft hier nur bedingt und ist eigentlich keine wirkliche Lösung, da er das Problem nur verzögert.
 

Wildcard

Top Contributor
Ich weiß ja nicht genau was du haben willst, aber schonmal dran gedacht einfach einen Tooltip zu verwenden?
 

Caffè Latte

Bekanntes Mitglied
Hi,

was ist denn jList1 für eine Komponente? Die jList1MouseMoved-Methode wird doch dann aufgerufen, wenn die Maus über dieser Komponente bewegt wird. In der Methode prüfst du, ob sich der Mauszeiger über der Komponente befindet. Das muss ja der Fall sein, sonst wäre die Methode ja nicht aufgerufen worden. Dem entsprechend geht das natürlich sehr flott.

Was willst du eigentlich machen? So was wie ein Toolotip-Fenster?
 
S

Souji

Gast
ja sozusagen, jedoch will ich nicht einfach nur einen Informativen Text sondern halt das ganze Panel als Mouseover,
So wie ich das hier mache wird jedoch solange die Mouse über der Componenteist dauernd das Fenster wi neu erzeugt und gezeichnet, selbst wenn die Mouse sich um millimeter bewegt.
Was ich genau an dieser Stelle mache ist eigentlich den Index des ListenElements in der JList zu holen, zu dieser wird dann aus einer LinkedList ein Object geholt das dem Panel als zusätzliche info hinzugegben wird. Im Panel wird dann das Object wie gewünscht angezeigt.
Was ich machen könnte wäre halt zu prüfen ob sich der Index geändert hat
:autsch: und erst dann neuzuzeichnen
 
G

Guest

Gast
Code:
    private void jList7MouseMoved(java.awt.event.MouseEvent evt) {                                  
        
        if(jList7.getIndexofComponentunderMousePosition()==this.lastCoveredIndex){return;}else{
            this.lastCoveredIndex=jList7.getIndexofComponentunderMousePosition();
            wi.dispose();
            wi=new javax.swing.JFrame();       
            wi.setUndecorated(true);
            ComponentDetailPanel wo=new  ComponentDetailPanel(wi,(Component)comList7.get(jList7.getIndexofComponentunderMousePosition()));
            wi.setLocation(jList7.getMousePosition());            
            wi.getContentPane().add(wo);
            wi.getContentPane().validate();
            wi.pack();
            wi.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseExited(java.awt.event.MouseEvent evt) {
                    wiMouseExited(evt);
                }
            });            
            wi.setVisible(true);
            wi.setBackground(new java.awt.Color(0, 0, 0));
            wi.setResizable(false);
            wi.setForeground(new java.awt.Color(0,0,0));
            wi.repaint();            
        }
    }                                 
    private void wiMouseExited(java.awt.event.MouseEvent evt) {
    wi.dispose();
    }

Das ist mein aktueller Code und er funktioniert soweit das das Flacker aufgehöhrt hat und das popup erst erzeugt wird wenn die Mouse über einem neuen Element der JList ist.
Das einzige Problem ist nun das ich es nicht hinkriege das dieses Fenster erst erzeugt wird wenn die Mouse ruht.
Ich habe es mit nem Threat versucht jedoch bekomme ich null pointer wenn ich aus der run methode auf JList7 zugreife.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben