2013-12-17 52 views
0

我有兩個類。 主打開第二個jframe中的用戶將按下一個按鈕,並觸發一個方法從主類/ jframe editare(String value)將自動添加一些數據到一些jtextfields在主jframe.The問題是,它贏得了不會觸發該方法。我嘗試調用主類中的其他方法,它也不會調用它們。我嘗試了很多東西,就像過去1-2小時一樣,無法弄清楚。不能從另一個類調用方法

下面是一些代碼: 從第二JFrame中:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {           
Test2 test2=new Test2(); 
test2.citireser(list.getSelectedValue().toString()); //won't work.works if i call it from the same method,the main one 
test2.restart(); //won't work either 
this.dispose(); } 

從第一JFrame的,主要的一個:

public void citireser(String cur) { 
    try { 
     serializedPath = "C:/Inter/" + cur; 
     InputStream file = new FileInputStream(serializedPath); 
     InputStream buffer = new BufferedInputStream(file); 
     ObjectInput input = new ObjectInputStream(buffer); 

     String[] storeAllArraysREAD[] = (String[][]) input.readObject(); 
     prodr = storeAllArraysREAD[0]; 
     cantr = storeAllArraysREAD[1]; 
     pretr = storeAllArraysREAD[2]; 
     input.close(); 
     buffer.close(); 
     file.close(); 
     System.err.println("prodr[1]= "+prodr[1].toString()); 
     for (int m = 0; m < prodr.length - 1; m++) { 

     allprod.get(m).setText(prodr[m]); 
     allcant.get(m).setText(cantr[m]); 
     allpret.get(m).setText(pretr[m]); 
     produsnou(); 

    } 

    } catch (ClassNotFoundException ex) { 
     System.err.println("EROARE"); 
    } catch (IOException ex) { 
     System.err.println("EROARE"); 
    } 

} 

編輯:好吧,嘗試了幾個不同的東西后小時我得到它。

public class Opt extends javax.swing.JFrame implements Printable { 

private final Test2 main; 

public Opt(Test2 aMain) { 
    main = aMain; 
    try { 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    initComponents(); 
    jScrollPane2.getVerticalScrollBar().setPreferredSize(new Dimension(0, 0)); 
    jScrollPane2.getVerticalScrollBar().setUnitIncrement(16); 

    citirel(); 

    if (list.getModel().getSize() == 0) { 
     jButton1.setEnabled(false); 
     jButton2.setEnabled(false); 
    } 

} 

您的幫助謝謝,我不知道是誰我應該選擇的正確的答案:(不好意思向其他人

+0

for(int m = 0; m

+0

我想幫助你,但你需要分享比這更多的代碼。 – karlphillip

+0

'-1'沒問題,最後一個是空字符串。這不是問題。我不知道還有什麼其他的事情要發佈在代碼因爲我張貼我發現相關的一切。它只是不會接受引用我的第一堂課或什麼 –

回答

1

請糾正我,如果任何的,這是錯誤的,因爲我想了解從殘缺碼程序:

  1. Test2(含JFrame你的程序入口點main(string[]))在一些點創建第二類(也是JFrame)並打開它。
  2. 當您單擊第二個窗口中的某個按鈕時,您希望修改Test2窗口的某些元素,並關閉輔助窗口。

假設上述內容是正確的,在您發佈的代碼片段中可以看到一個明顯的問題。

jButton3ActionPerformed,你正在創建一個新的Test2對象,並修改它。如果您想修改原始窗口,則需要存儲對其的引用。例如,需要一個Test2對象作爲第二個類的參數,並將該參數作爲字段存儲在該類中。

+0

是的,類似的東西。第一個jframe和main類是一個用於製作購物清單的應用程序,您可以將其保存到文件中。您可以單擊第一個jframe上的按鈕,該按鈕將帶您到一個帶有清單的新窗口包含所有保存的文件。你可以在那裏預覽它們,如果你願意,你可以按一個按鈕,讓你回到第一個和主窗口,將讀取你選擇的文件,並將使其能夠編輯。實際上,如果我設置了'test2.setvisible(true)',它將打開一個新的窗口,它具有我的內容編輯它。如何解決這個問題? –

+0

您需要對原始'Test2'對象的引用,而不是創建一個新對象。如果你的列表窗口類有一個像'private Test2 main;'這樣的字段,並且有一個像'public ListWindow(Test2 main){this.main = main; }'並且像'ListWindow list = new ListWindow(this);'那樣從'Test2'創建列表窗口,'然後'jButton3ActionPerformed'可以調用'main.citireser(...);'。 –

+0

那麼,我的主類/ jframe現在被命名爲'Main',第二個命名爲'Opt'。項目名稱是'Test2'.我可以如何引用它,而不是創建一個新的?我搜索後,但沒有任何工作,我嘗試了幾件事情。我沒有這樣的領域,也沒有任何其他你指出的東西:(對不起,不能夠給出完整的代碼:( –

3

這裏的問題是,你正在使用的新實例工作Test2在執行的動作(第一塊代碼)中,您正在創建一個新的Test2(這將是第一幀)。必須保留某處(通常是一個字段)對創建的第一個Test2的引用。

如果您還有其他問題,請考慮編輯您的問題併發布完整代碼(t至少整個框架)。我的蜘蛛感官告訴我,有一些背景失蹤。

此外,我們有類似的姓氏。 :-)

+0

該死的,看到你的帖子太晚了。你可能是對的!另外,是的,很酷巧合,heh –

相關問題