2017-04-18 3 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)ボタンの場合は、マウスリスナーではなく「ActionListener」を追加します。ボタンリスナはボットマウスとキーボード入力に応答します。 2)GUIのような高度な領域に近づく前に明確にすべきトピックである「可変スコープ」を研究する。 3)OK ..私はちょうどこのコードがマウスリスナー***を***に追加していることに気付きました(re point(1))***アクションリスナーのメソッドが実行されました!それは意味をなさない。マウスリスナーのすべての言及を削除します。 –

+0

なぜ 'MouseListener'をその' ActionListener'の中のボタンに追加していますか? – MadProgrammer

答えて

0

は、フィールドを初期化し、それに必要な値を割り当てる:

private String pathName; 

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

pathName変数がmouseClicked関数の内部で作成されます - ので、関数が完了したら、それは破棄されます。

最初のprintLnステートメントが機能する理由は関数内で使用できますが、外部には存在しません。これを修正するには、関数の開始前にすでに存在する変数にデータを割り当て、関数が終了した後も変数が存在し続けるようにします。

String pathName = null;を高いスコープ(このコードを含むクラスのように)に移動すると、これが機能します。

関連する問題