2016-02-19 23 views
0

你好,大家好,我有我的Swing應用程序運行,但我需要創建一個「初始化類」在那裏我創建數據實例來填充程序,當我運行它 如果我創建一個實例與在MainJFrame構造它的工作完美,但數據我需要填充,將其發送至所有的面板從另一個類 這裏MainJFrame是我MainJFrame代碼:如何使用來自其他Java類的類實例和數據加載Java Swing MainJFrame?

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package UserInterface; 


import Business.Initialization; 
import Business.Inventory; 
import Business.InventoryList; 
import Business.Product; 
import Business.ProductCatalog; 
import Business.Store; 
import Business.StoreDirectory; 
import UserInterface.StarMarketAdmin.MarketAdminWorkArea; 
import UserInterface.StoreAdmin.LoginStoreAdmin; 
import java.awt.CardLayout; 
import java.util.Collections; 
import javax.swing.SwingUtilities; 

public class MainJFrame extends javax.swing.JFrame { 

    /** 
    * Creates new form MainJFrame 
    */ 
    private StoreDirectory storeDirectory; 
    private InventoryList inventoryList; 
    private ProductCatalog productCatalog; 
    private Store store; 

    public MainJFrame() { 
     initComponents(); 
     this.storeDirectory = new StoreDirectory(); 
     this.inventoryList = new InventoryList(); 
     this.productCatalog = new ProductCatalog(); 
     this.store = new Store(); 


    } 


    private void btnMarketAdminActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
     MarketAdminWorkArea panel = new MarketAdminWorkArea(userProcessContainer,storeDirectory,inventoryList,productCatalog,store); 
     userProcessContainer.add("MarketAdminWorkArea", panel); 
     CardLayout layout = (CardLayout) userProcessContainer.getLayout(); 
     layout.next(userProcessContainer); 

    }            

    private void btnStoreAdminActionPerformed(java.awt.event.ActionEvent evt) {            
     // TODO add your handling code here: 
     LoginStoreAdmin panel = new LoginStoreAdmin(userProcessContainer,storeDirectory,inventoryList,productCatalog); 
     userProcessContainer.add("LoginStoreAdmin", panel); 
     CardLayout layout = (CardLayout) userProcessContainer.getLayout(); 
     layout.next(userProcessContainer); 
    }            

} 

現在,如果我創建一個實例,如:

Store s = storeDirectory.addStore(); 
     s.setStoreName("Eddie's Market"); 
     s.setStreet("Plainfield Pike"); 
     s.setCity("Johnston"); 
     s.setState("RI"); 
     s.setCountry("USA"); 
在MainJFrame

它的工作100%,但我需要在另一個類中創建它,並在MainJFrame中將其從其中發送到所有其他pannels。 我該怎麼做?

+0

看到我上次編輯時,通過將公共函數放在主機中,您可以在其他地方創建它。並從其他課程中獲得。 –

+0

你可能會想看看[Model-View-Controller](http://en.wikipedia。org/wiki/Model%E2%80%93view%E2%80%93controller),這是Swing所做的一個重要概念,但和Swing的許多人一樣,要求開發人員實際上努力利用自己 – MadProgrammer

回答

0

創建公共職能從外部存取權限私有類

不知道你想要什麼確切,但選項是無止境的

public void initStore(){ 
} 

或者只是把它

public Store getStore(){ 
    retturn store; 
} 

甚至創建並從那裏返回:

public Store storeFactory(){ 
    // code here 
    return store; 
} 

,或者如果你想另一家商店,並返回其

public Store storeFactory(){ 
    // code here to create a new store 

    return store2; 
} 

*不建議,但也是一種選擇:靜態*

你也可以創建一個靜態的,甚至使它公衆,但是公共訪問並不是最好的方式。更好地保持私密性並使用上述功能來獲取它。在通常不會勸告這樣的靜態用法......但假設大型機主程序......在這種情況下,有可能是在不使用靜態例外....

private static Store store; 

public static Store store; 

比你可以從任何地方訪問它:

MainJFrame.store 

*年底靜態備註*

但也許你只是意味着這樣的:

public putStore(Store store){ 
    this.store=store; 
} 

這樣你就可以在其他類中創建它,並從其他類其他類

得到它來創建它,你migth甚至先用空得到它(初始化它在大型機:

private Store store=null; 
在其他類

Store store = mainframe.getStore(); 
// code to create it 

或只能創建它,如果尚未創建:

if (store==null){ 
    // Only create if still null 
    // code to create it here 
} 
// and here use it, just created or not 

Migth是奇怪,'知道這一切就像意見,但:

所有關於上面是基本的Java知識公有,私有,靜態等等....看起來可能會有些教程,瞭解基本的東西。 Java可能是一個痛苦......如果你不明白它(內存泄漏等),所以請確保你知道你在做什麼....(如果你想使用它的話) )

,在Java中聲明它,並初始化它的一個重要的區別:

這是一個聲明:

private Store store: 

這是init:

store = // something, even putting it to null is an init 

和T他結合申報和init的:

private Store store=null; 

最後一個你需要,然後才能從其他類調用它,因爲你實際上將無法獲得對象,但TOT對象的指針。 有一個指針,你需要tot初始化它,比初始化爲null足夠....所以至少有一個指針。 瞭解指針的方式以及如何在java中傳遞事件,將會在更大的程序中節省一些內存問題。

+0

全部我想要的不是寫作:Store s = storeDirectory.addStore(); s.setStoreName(「Eddie's Market」); (「Plainfield Pike」); s.setCity(「Johnston」); s.setState(「RI」); s.setCountry(「USA」);在MainJFrame構造函數中,我需要將它寫入另一個類並在那裏調用它,我試圖將它放在另一個類中的公共函數中,並在mainjframe構造函數中調用它,但它不起作用,因爲它使用另一個storeDirectory實例例如我在那個特定的類 – DSTRACK

+0

中創建了一個例子,你可以製作一個靜態的例子,並使用那個 –

+0

這就是我正在尋找的!謝謝你 – DSTRACK

0

將此Store實例注入到MainJFrame構造函數中。 Store類將保存數據,您可以通過get方法訪問它。

你有沒有想過?

+0

你能舉個例子嗎? – DSTRACK

+0

當然。 使MainJFrame的Store類成員。實例化它,無論你已經實例化。將它作爲MainJFrame的參數傳遞。 MainJFrame(商店店鋪){ this.store = store; } 如果store只是一個「數據持有者」,那麼您將需要另一個類,另一個進程來保持store對象中的信息處於最新狀態,從而允許MainJFrame使用最新版本。 –

+0

Ahh okey明白了,謝謝 – DSTRACK