2017-04-18 1 views
-2
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { 
    jButton3.addMouseListener(new MouseAdapter() { 
     //String pathName; 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      String pathName = null; 
      FileFilter filter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg"); 
      fc.setFileFilter(filter); 
      int response = fc.showOpenDialog(null); 

      try { 
       if (response == JFileChooser.APPROVE_OPTION) { 
        pathName = fc.getSelectedFile().getPath(); 
        System.out.println(pathName);  // this works 
        //JOptionPane.showMessageDialog(null, pathName); 
        ImageIcon icon = new ImageIcon(pathName); 
        jLabel4.setIcon(icon); 
       } else { 
        // JOptionPane.showMessageDialog(null, "Feel Free to Look Later"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    System.out.println(pathName);  // THIS DOESNOT 
}          
+0

1) Fügen Sie für eine Schaltfläche einen "ActionListener" statt eines Maus-Listeners hinzu. Der Tasten-Listener reagiert auf Maus- und Tastatureingabe. 2) Research 'Variable Scope', das ist ein Thema, das sollte klar sein, bevor Sie sich an einen fortgeschrittenen Bereich wie das Erstellen einer GUI. 3) OK .. Ich habe gerade bemerkt (re Punkt (1)), dass dieser Code einen Maus-Listener *** innerhalb *** der Aktion durchgeführt Methode eines Aktion Listener! Das macht keinen Sinn. Entfernen Sie alle Erwähnungen des Maus-Listeners. –

+0

Warum fügen Sie der Schaltfläche in ihrem "ActionListener" einen 'MouseListener' hinzu? – MadProgrammer

Antwort

0

ein Feld initialisieren und benötigten Wert zuweisen:

private String pathName; 

jButton3.addMouseListener(new MouseAdapter() { 
    .... 
    pathName = fc.getSelectedFile().getPath(); 
    .... 
}); 
System.out.println(pathName); 
0

Das pathName Variable ist innerhalb der mouseClicked Funktion erstellt - so wird es zerstört werden, sobald die Funktion abgeschlossen ist.

Sie können es innerhalb der Funktion verwenden, weshalb Ihre erste printLn-Anweisung funktioniert, aber außerhalb nicht existiert. Um dies zu beheben, weisen Sie die Daten einer Variablen zu, die bereits vor dem Start der Funktion existiert, damit sie nach dem Ende der Funktion weiterhin existiert.

Verschieben Sie String pathName = null; in einen höheren Bereich (wie in der Klasse, die diesen Code enthält) und dies funktioniert.

Verwandte Themen