2011-05-11 12 views
6

MVC mimarisini kullanarak bir uygulama oluşturmak için bu eğiticiyi kullanıyorum: http://www.oracle.com/technetwork/articles/javase/index-142890.html. Ancak kodun içine JMenuBar'ın actionListener'ı oluşturmak ve eklemek için kodu nasıl veya nereye koyacağımı bilmiyorum.Java'da MVC mimarisinde bir JMenuBar nasıl entegre edilir?

Dahası, Cay Horstmann tarafından kitap Nesne Tabanlı Tasarım & Desenler "denetleyici pencere sisteminden fare ve klavye olayları işleyebilir veya böyle düğmeler ve menüler gibi kullanıcı arabirimi öğeleri içerebilir." demeliyim Ben Bu tavsiyeye uyun, eğer evet, nasıl uygulamalıyım? Ana sınıfımdaki JFrame'e nasıl eklenir?

+0

Yanıt değil, ancak MVC yerine PM tabanlı mimariye göz atmanızı öneririm. Karsten Lentzsch'un bu konuda çok iyi sunumları var (özür dilerim ki şimdi bağlantı yok) ve ayrıca açık kaynak JGoodies bağlayıcı kütüphanesini uygulamaya yardımcı olacak. – jfpoilpret

+0

Tank size jfpoilpret, bu mimariden haberdar değildim, ona bakacağım. Java.swing.Action – JPB

cevap

3

How to Use Actions'da önerildiği gibi, Action bunu kapsüllemek için uygun bir yoldur. Dahası, Action ", işlevselliği ve bir bileşenden gelen durumu ayırmak için kullanılabilir."

Ek: example Bu çok basit, model, bir dosya sisteminde bir dizini temsil eden bir File ve görünümü actionPerformed() dinler bir JLabel olup. Action tarafından sağlanan kapsülleme, her menü öğesinin ve araç çubuğu düğmesinin aynı sonucu vermesini sağlar. Yaklaşım, Swing'in separable model architecture işaretidir.

+0

+1 @mKorbel: Teşekkürler! Uygunluk zorlayıcıdır, ancak hala mimari yönü ele almam gerekiyor. – mKorbel

+0

için – trashgod

0

Menü Çubuğu'nı her zaman aşağıdaki şekilde oluşturdum.

class MyMenuBar extends JMenuBar { 
    add(new FileItem()) 
} 

class FileItem extends MenuItem { 
    addMenuItem(new ExitAction()) 
} 

class ExitAction extends AbstractAction { 
    //define the action, tooltip and name of here 
} 

sonra ana çerçeve içinde sadece bunun JFrame myframe için menü çubuğu ekleyin;

myFrame.setMenuBar(new MyMenuBar()) 

Bu sözdiziminden bazıları yanlış olabilir, bir süre içinde bir menü çubuğu yazmadınız. Daha sonra yeniden kullanılabilir hale gelebilecek veya bazı DI çerçevesini kullanarak aynı şeyi yapmak için fabrika sınıflarına sahip olacak şekilde genişletebilirsiniz.

İlgili konular