2016-06-11 17 views
0

Ich versuchte folgendes Programm für Test-Maus bewegte Methode der Java-Maus-Adapter-Klasse, aber es hat nicht funktioniert. Ich möchte den Wert des Fortschrittsbalkens von 2 erhöhen, wenn ich die Maus über die Schaltfläche "Mouse Over" bewege. Wie kann ich das beheben?Wie schreibe ich Maus bewegte Ereignis für JButton

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

class ProgressDemo extends JFrame{ 
    private JProgressBar progress; 
    private JButton mouseButton; 
    static int x = 2; 
    ProgressDemo(){ 
     progress = new JProgressBar(JProgressBar.HORIZONTAL,0,100); 
     progress.setBounds(50,100,500,15); 
     progress.setStringPainted(true); 
     mouseButton = new JButton("Mouse Over"); 
     mouseButton.addMouseListener(new MouseAdapter(){ 
      public void mouseMoved(MouseEvent evt){ 
       progress.setValue(x+=2); 
      } 
     }); 


     JPanel mousePanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     mousePanel.setBounds(0,10,600,50); 
     mousePanel.add(mouseButton); 

     setSize(600,200); 
     setLayout(null); 
     add(mousePanel); 
     add(progress); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
    } 
} 

class JProgress{ 
    public static void main(String args[]){ 
     ProgressDemo p1 = new ProgressDemo(); 
     p1.setVisible(true); 
    } 
} 
+0

Java-GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). –

+0

'public void mouseMoved (MouseEvent evt) {' sollte '@Override public sein void mouseMoved (MouseEvent evt) {'. Übrigens wird das zu einem Kompilierungsfehler führen, der behoben werden muss. –

+0

@Andrew noch löst das das Problem nicht. Das OP möchte ein Mouseover-Verhalten haben und 'mouseMoved' ist nicht die richtige Methode, um dieses Verhalten zu überschreiben. Wie es in der zweiten Antwort des möglichen Duplikats geschrieben ist, würde es "mouseEntered" und "mouseExited" sein, um die Maus auszudrücken, die über die Schaltfläche (Eingabe) hinausgeht und die Grenzen verlässt (Beenden). – OliPro007

Antwort

1

Ändern Sie Ihren Code wie unten. Hoffe es hilft dir weiter zu kommen.

mouseButton.addMouseMotionListener(new MouseMotionListener() { 

    @Override 
    public void mouseDragged(MouseEvent e) { 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     progress.setValue(x += 2); 
    } 
}); 
+0

Es hat funktioniert! Danke vielmals.. –