2017-08-03 138 views
0

我想添加一個關閉BufferedWriter的ActionListener。總的來說,我的程序將變量值保存到文件中。這些值會讀入在此Java GUI中運行的python腳本。但是,我無法獲得(按鈕單擊)ActionListener的工作。我只能得到一個WindowListener(用於框架關閉)才能工作。如何爲Java Swing按鈕製作ActionListener

對於WindowListener的我用下面的代碼,

frame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       try { 
        bufferFileWriter.close(); 
       } catch (IOException ioe) { 
        ioe.printStackTrace(); 
       } 
      } 

     }); 

對於一個ActionListener,這給了錯誤:java.io.IOException的流關閉,我用下面的代碼:

setVarFileBtn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       // Save the variable values when VarFileBtn pressed 
       try { 
        bufferFileWriter.close(); 
       } catch (IOException ioe) { 
        ioe.printStackTrace(); 
       } 
      } 
     }); 

什麼我應該使用代碼讓偵聽器識別一個按鈕setVarFileBtn已被點擊,然後關閉一個BufferedWriter?我是否遺漏了某些Java Swing代碼概念以使BufferedWriter寫入被保存到文件中?

+0

你問的是如何驗證它確實是'setVarFileBtn'按下按鈕? –

+0

我想做的不僅僅是驗證是否按下了特定的按鈕。然後我想做一些操作,關閉名爲bufferFileWriter的BufferedWriter。這是我以前必須做的,以保存我寫入文件的所有內容。 – lasingallday

回答

0

爲了獲得正在按下的按鈕,您需要從事件中獲取操作命令。你可以做到這一點,如:

new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     if (e.getActionCommand().equals("Save")) { 
      // perform save code 
     } 
    } 
} 

"Save"是無論JButton的名字。

+0

固定。感謝您指出,沒有抓住! @camickr –

1

我解決了這個問題。我的錯誤發生是因爲我有兩個ActionListener的同一個按鈕。未顯示的監聽器用於寫入變量值。一旦我簡單地將其添加到第一位聽衆:

try { 
        bufferFileWriter.close(); 
       } catch (IOException ioe) { 
        ioe.printStackTrace(); 
       } 

將變量值寫入我的文件。

+0

@NickClark,最好爲每個函數分別設置監聽器。無論如何,你開始用if/else語句來編寫監聽器代碼,你有一個設計問題。 – camickr