2017-07-23 52 views
1

在我的程序,從第一的JFrame(GUI),你點擊一個按鈕(標註爲更改模板),這將打開第二的JFrame(TempList)。
還有一個模板類。編輯另一個類的對象?

public class Template { 
    private String name; 

    public Template(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     name = this.name; 
    } 

GUI類

public class GUI extends javax.swing.JFrame { 

    private static TempList FrameB = null; 
    private Template template = new Template("image1"); 

    public GUI() { 
     initComponents(); 
    } 

    private void ChangeTemplateActionPerformed(java.awt.event.ActionEvent evt) { 
     if (FrameB == null) { 
      FrameB = new TempList(); 
     } else { 
      if (FrameB.isVisible()) { 
       FrameB.hide(); 
      } else { 
       FrameB.show(); 
      } 
     } 
    } 

從TempList,你應該能夠點擊一個按鈕,用於改變GUI

什麼代碼創建的模板對象的我應該在TempList Class中寫入,這樣當按下按鈕時,它會更改GUI類中Template對象的名稱?

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    // Change Template?  
    this.setVisible(false); //closes Templist 
} 
+0

是否要在'GUI'中創建'Template'對象?或者可以在'TempList'中創建? – c0der

+0

請正確縮進您的代碼,並且變量名稱通常不以大寫字母開頭,以便輕鬆區分它們與類名。 – Zabuza

+0

請參閱:https:// stackoverflow。com/help/someone-answers – c0der

回答

1

您需要在模板上調用setName(...)。因此,您需要參考要更改名稱的Template實例。如果你沒有這個引用,你需要傳遞它與方法或構造函數等。


一個很好的選擇(取決於你的整體結構)可能是在施工TempList傳遞給它。因此,改變你的TempList構造並添加Template說法,就像這裏:

public class TempList { 
    // Member variable to memorize the template for later use 
    private Template mTemplate; 

    // Constructor with Template argument 
    public class TempList(Template template) { 
     this.mTemplate = template; 
    } 

    // Other stuff of TempList 
    ... 
} 

然後你就可以使用該引用在方法內部的TempList喜歡這裏:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    // Change the name 
    mTemplate.setName("New Name"); 

    this.setVisible(false); //closes Templist 
} 

當然,你還需要通過現在創建時參考TempList,看看這個片段:

private void ChangeTemplateActionPerformed(java.awt.event.ActionEvent evt) { 
    if (FrameB == null){ 
     // We need to also pass the reference to Template now by using the newly created constructor 
     FrameB = new TempList(template); 
    } else { 
     if (FrameB.isVisible()){ 
      FrameB.hide(); 
     } else { 
      FrameB.show(); 
     } 
    } 
} 

現在你的TempList知道Template,記住它在mTemplate裏面,並且在他的jButton2ActionPerformed方法中也使用它。

1

Zabuza提出的解決方案是有效的。
考慮TempList也創造了Template對象,而不是在Gui

public class TempList extends JFrame{ 

    private Template template; 

    public TempList() { 

     //todo: JFrame constuction 
     template = new Template("image1"); 
    } 

    public void setTemplateName(String name) { 
     template.setName(name); 
    } 
} 

通過使用它在GuiFrameB,setTemplateName("new name");

P.S堅持到Java命名約定。使用frameB