2016-03-31 20 views
0

Şu anda Java Swing'de birden fazla jFrames (ekipman listesi eklemek, ekipman eklemek, ekipmanı kaldırmak vb.) Ihtiyacım olan bir problem üzerinde çalışıyorum. Tüm jFrames'lerimde belirli değişkenlere erişebilmem gerekiyor.Birden fazla jFrames'ten bir değişkene nasıl erişebilirim?

Herhangi bir fikir harika olurdu! Teşekkürler

+1

Çerçeveleriniz ortak bir nesneyi paylaşabilir, bu değişkenleri tutar ... –

+3

1. Model kodunuzu (mantığı ve verileri tutan kod) görünüm kodunuzdan ayırın (GUI kodu) ve bu işlemin tümü düzgünce sadeleştirin. 2. Gerçekten birden fazla JFram kullanmak istemiyorsunuz ve kullanıcının programınızı yapmıyorsunuz. Daha fazla bilgi için lütfen [Çoklu JFrames: İyi veya Kötü] (http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-or-bad) okuyun. 3. Daha spesifik bir yardıma ihtiyacınız varsa, lütfen daha özel bir soru sorun, ilgili kodu gösteren, tercihen geçerli bir [mcve] (lütfen bağlantıya bakın). –

+0

Ayrıca sorunuzun, bir IDE olan NetBeans değil, bir GUI kitaplığı olan Swing ile ilgili olduğunu unutmayın. –

cevap

1

Tüm sınıflarınızda bulunması gereken değerleri saklamak için ortak bir veri nesnesini kullanabilirsiniz. ,

public class Frame1 extends JFrame{ 

    private DataObject data; 

    public Frame1(DataObject data){ 
     this.data = data; 
    } 


    public void doStuff(){ 
     // ...do some stuff 
     data.value1 = "Some new value"; 
    }  
} 



public class Frame2 extends JFrame{ 

    private DataObject data; 

    public Frame2(DataObject data){ 
     this.data = data; 
    } 


    public void whatever(){ 
     if(data.value1.equals("Some new value")) 
      // ...do some stuff 
    }  
} 

Ve son olarak, sizin JFrame sınıfların yeni örneklerini oluşturmak:

public class DataObject{ 
    public String value1 = ""; 
    public String value2 = ""; 
    public int int1 = 0; 
} 

İkinci sizin JFrame sınıflara böyle bir şey tanımlayın:

Öncelikle, verileri tutmak için yeni bir sınıf oluşturmak bunlara aynı örneğinin DataObject örneğini bunlara benzer şekilde verir:

DataObject myDataObject = new DataObject(); 
Frame1 frame1 = new Frame1(myDataObject); 
Frame2 frame2 = new Frame2(myDataObject); 
-1

equipment adlı bir değişkenle frame1 adlı bir sınıfınız olduğunu ve bu değişkenin değeri "hello" olduğunu varsayalım.

public class frame1{ 
public static String equipment = "hello"; 
} 

Şimdi ikinci çerçeve isminizi verelim frame2.

public class frame2{ 
} 

Yani frame2 size çıkışa frame1 den equipment değerini istediğinizi varsayalım. Eğer farklı bir pakette bir sınıf varsa

public class frame2{ 
System.out.println(frame1.equipment); 
} 

sadece yourClass.yourVariable

çıktısını olur çıktısını olacaktır:

yourPackage.yourClass.yourVariable 
+1

Bu, her zaman kötü bir fikir olan küresel durumun kullanılmasını önerir. Bkz. Http://stackoverflow.com/questions/7026507/why-are-static-variables-considered-evil –

+0

@StefanDollase Tamam, bu HER ZAMAN kötü bir fikir değildir, ya da dilde uygulanmayabilir. ama bu sorunun nasıl en iyi çözüm olmadığını görebiliyorum. –

0

En basit yolu: ekipman Kapsayıcı referansını tutmak için Çerçeveler yapın .

Orta yol: Süpervizör Çerçevelerinize başvuruda bulunur ve bunları veriyle besler ve görünür/değiştirilmiş/değişmiş olması gerekip gerekmediğini bildirir.

En zorlu yol: Ekipman kabını içeren model, çerçevelerinize referans veren sunum yapanlarınızın referanslarını tutar. Çerçeveleri kontrol eden model güncellemeleri sunar. Çerçeveler sunum yapan kişilere bilgi gönderir ve modelinizi eylemleriniz hakkında bilgilendirir.

+2

Sanırım karmaşık bir yol haline getiriyorsunuz. Benim tahminim, OP'nin _Indermediate way_ ve _Hardest way_'in bir kelimesini anlayamayacağı ya da soruyu en başta sormayacaktı. – BadCash

İlgili konular