2017-04-18 48 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)行..我剛剛注意到(重新點(1)),這個代碼是添加一個鼠標監聽器***內***動作監聽器的動作執行方法!這是沒有意義的。刪除所有提及的鼠標監聽器。 –

+0

你爲什麼要在'ActionListener'裏面的按鈕添加一個'MouseListener'? – MadProgrammer

回答

0

初始化一個字段,並指定所需的值給它:

private String pathName; 

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

pathName變量在mouseClicked函數內部創建 - 所以一旦功能齊全,將被銷燬。

你可以在函數內部使用它,這就是爲什麼你的第一個printLn語句有效,但它不會在外面存在。要解決這個問題,請在函數啓動之前將數據分配給已存在的變量,以便在函數結束後繼續存在。

String pathName = null;移動到一個更高的範圍內(就像包含這段代碼的類一樣),這將起作用。

相關問題