2014-12-28 63 views
1

我收到「無法從靜態上下文中引用非靜態方法coSearchReturn(String [])的錯誤。」另一個類中的Java按鈕事件調用方法

我已閱讀了關於此錯誤的一些文章,似乎無法將它們應用於我的情況。不是說我的情況很特別,只是我有限的經驗!我擁有的是一個jTable,用戶在表格中選擇一行,並在用戶單擊確定按鈕時將表格值傳遞給另一個類別中的另一個表格。我在目標窗體中創建了一個方法來處理數據,我試圖從按鈕事件中調用該方法。從我讀過的,我需要實例化它來調用它,但我不知道在哪裏/如何。

這裏是按鈕事件代碼。我從表中獲取選定的行,使用該行中的第一個值引用回從表構建的ArrayList。 arraylist包含更多的數據顯示在表中,我需要所有的數據。我想從arraylist發送正確的值到目標方法/類中的表單。

private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {          
    // TODO add your handling code here: 
    int rowNum = jTable1.getSelectedRow(); 
    String coNum = jTable1.getValueAt(rowNum,0).toString(); 
    String[] text; 

    int x = coSearchResults.size(); 
    for (int temp = 0; temp < x; temp++){ 
     text = coSearchResults.get(temp).split("\\|"); 
      //inner loop is for each column, in the row 
      for (String y : text){ 
      if (y.equals(coNum)) { 
       CheckIn_Search.coSearchReturn(text); 
      } 
      } 
    }   

    dispose(); 
}  

目標方法coSearchResults位於不同的類CheckIn-Search中。現在,代碼只是在jFrame中切換面板,但最終會填充我使用jPanel創建的窗體。

public void coSearchReturn(String[] results){ 
    jPanel1.setVisible(false); 
    jPanel3.setVisible(true); 
}  

我認爲我需要做的是實例化coSeachReturn,但無法讓我的頭在哪裏/如何。

在此先感謝您的幫助。

+0

真的嗎?基本上,'CheckIn_Search'是實際的類,但該方法不是'static',並且在調用它之前需要該類的實例。而不是試圖通過類調用方法,而是將類的實例傳遞給調用者並使用它而不是 – MadProgrammer

+0

您不能調用不存在的東西。由於您尚未創建對象,因此非靜態方法尚不存在。靜態方法(按定義)總是存在。 – Kapparino

+0

您的評論與我的閱讀內容相符,我只是在應用它時遇到問題。你能告訴我在哪裏創建對象並調用它嗎?它應該很簡單,但我只是沒有得到它。 – creed

回答

1

您conditon內部或作爲一類場創建對象,所以你可以用你的方法:

if (y.equals(coNum)) { 
    CheckIn_Search checkIn_Search = new CheckIn_Search(); 
    checkIn_Search.coSearchReturn(text); 
} 
+0

完美!我會發誓我嘗試過,但顯然不是。感謝這個例子。 – creed

1

您需要將CheckIn_Search的實例傳遞給包含btnOKActionPerformed方法的類實例,例如在構造函數期間。然後,您可以將參考存儲在一個字段中。那麼如果checkInSearch是該字段的名稱,則可以撥打checkInSearch.coSearchReturn(text)

如果還沒有CheckIn_Search的實例存在,請致電new CheckIn_Search().coSearchReturn(text)(考慮無參數構造函數)。但我認爲它已經存在,因爲jPanel1jPanel3字段。

相關問題