2016-09-26 42 views
0

menu screen有沒有更好的方法,然後在單個JFrame中保存多個JTabbedPanes?

這是我的菜單屏幕。這是一個JTabbedPane,當用戶單擊任何選項卡時,我將菜單的可見性設置爲false,並將另一個選項卡窗格的可見性設置爲true。 假定用戶點擊了股票,那麼窗口會是這個樣子:

Stock Screen

當「< <」標籤,將庫存的可見性設置爲false,菜單的可見性設置爲true,用戶點擊。

創建多個JFrame文件並執行相同的操作,而不是在單個框架內添加多個TabbedPanes會更好嗎?維護整個JFrame的單個.java文件變得很難。

+1

如果你有一個單獨的文件,那麼你沒有將MVC和OOP概念應用到正確的....並且看到[使用多個JFrames,好/壞實踐?](http:// stackoverflow。 com/questions/9554636/multi-jframes-good-or-bad-practice)(BAD)也會查看[Card Layout](https://docs.oracle.com/javase/)教程/ uiswing/layout/card.html)在視圖之間切換而不是改變可見性 – Frakcool

+0

感謝您的提示,我會立即看看卡片佈局:D我有多個java文件,每個文件處理不同的功能,但只有1文件與所有的GUI和事件,這是越來越難以維護所有的事件代碼和添加組件和一切在一個單一的Java文件,所以我問,如果我寧願做多個jframes其他文件只處理插入和其他這種operati但是那裏的對象是在那個jframe文件本身中創建的 –

+0

不知道我完全理解這裏的層次結構,但是似乎主菜單中的每個項目可能有多個子項目?那些反過來有孩子嗎?也許是一個JTree--這將允許同時查看父級和子級操作 - 然後使用「CardLayout」根據樹節點上的點擊在視圖之間切換。 – copeg

回答

2

我在我的一個應用程序中有類似的菜單樣式。我會做下列之一:

  1. 爲了更好組織我會提出你的第二個JTabbedPane另一個JFrame進出交換代碼。這會很快,不會給你任何新功能,但會讓你的代碼更容易跟蹤。
  2. 正如另一張海報顯示,你可以做上面的兩個選項卡。這將分離代碼併爲用戶提供「上一級」功能,而不必「返回」。
  3. 我喜歡做的是兩者的結合。對於主菜單,請將標籤保留在左側,但子菜單有一個單獨的JTabbedPane高於,當訪問第一個菜單時將加載到框架中。它爲您的窗口提供了一個整潔的外觀,一種輕鬆瀏覽所有內容的方式,它將訓練用戶向左看大變化,向小看看。這樣,一旦用戶對此感到滿意,就可以讓更多的菜單以這種方式行事,並且使用它越多,它就越直觀。
+0

你是否建議這樣的事情? [帶有標籤的歡迎屏幕](http://puu.sh/roLRq.png) –

+0

對於第三種選擇,是的。我喜歡「訓練」我的用戶在某些地方期待某些事情。我發現當我這樣做的時候,我猜「我從哪裏去哪裏」的問題要少得多。 – usmcphysicist

+0

嗯謝謝你的建議,我非常感謝它:D –

3

是的,你也可以做到這一點,以這樣的方式

JTabbedPane preupdatetab = new JTabbedPane(); 
preupdatetab.setForeground(new Color(255,0,0).darker()); 
preupdatetab.setBounds(30,15,930,300); 
preupdate.add(preupdatetab); 
precomplete.setLayout(null); 
preupdatetab.add(precomplete,"Complete Change"); 
preonce.setLayout(null); 
preupdatetab.add(preonce,"Qty Change"); 
changelocationpanel = new JPanel(); 
changelocationpanel.setLayout(null); 
preupdatetab.add(changelocationpanel,"Change Location"); 
changesaleprice = new JPanel(); 
changesaleprice.setLayout(null); 
preupdatetab.add(changesaleprice,"Change Sale Price"); 
changebookprice = new JPanel(); 
changebookprice.setLayout(null); 
preupdatetab.add(changebookprice,"Change Book Price"); 
changevendor = new JPanel(); 
changevendor.setLayout(null); 
preupdatetab.add(changevendor,"Change Vendor"); 
changeitemname = new JPanel(); 
changeitemname.setLayout(null); 
preupdatetab.add(changeitemname,"Change Item Name"); 

的其他變量全局聲明JLabel的,所以不要混淆 和下面的圖片會清除你更多關於這一點。 enter image description here

+0

中選擇哪個選項卡的基礎上進行切換,只有1個.java文件用於具有jtabbedpane的jframe,並且jtabbedpane中添加了多個jtabbedpanes? –

+0

是的你的權利 –

+0

'changeitemname.setLayout(null);'Java GUIs必須在不同的操作系統上工作',屏幕大小,屏幕分辨率等等,使用不同語言環境中的不同PLAF。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

相關問題