2016-09-26 6 views
0

menu screenЕсть ли лучший способ сохранить несколько JTabbedPanes внутри одного JFrame?

Это мой экран меню. Это JTabbedPane, когда пользователь нажимает на любую из вкладок, я устанавливаю видимость меню в false и устанавливаю видимость другой панели с вкладками в true. Say пользователь нажал на складе, то окно будет выглядеть примерно так:

Stock Screen

Когда пользователь нажимает на вкладке «< <» будет установлена ​​видимость на склад, чтобы фальшивая и меню, то видимость истину.

Лучше всего просто создать несколько файлов JFrame и сделать то же самое, вместо добавления нескольких вкладок в один кадр? Сложно поддерживать единственный файл .java для всего JFrame.

+1

Если у вас есть один файл, то вы не применяете концепции MVC и OOP правильно .... И смотрите [Использование нескольких JFrames, Good/Bad Practice?] (Http: // stackoverflow. com/questions/9554636/the-use-of-multiple-jframes-good-or-bad-practice) (BAD) также взгляните на [Макет карты] (https://docs.oracle.com/javase/ tutorial/uiswing/layout/card.html) для изменения между представлениями вместо изменения видимости – Frakcool

+0

Благодарим вас за советы. Я сразу рассмотрю макет карты: D у меня есть несколько java-файлов, каждый из которых имеет дело с различными функциями, но только 1 файл со всеми gui и событиями, и было сложно поддерживать весь код события и добавлять компоненты и все в одном файле java, поэтому я спросил, нужно ли мне делать несколько jframes, другие файлы имеют дело только с вставкой и другими такими операциями но там были созданы объекты в этом файле jframe –

+0

Не уверен, что я полностью понимаю иерархию здесь, но кажется, что каждый элемент главного меню может иметь несколько дочерних элементов? У них, в свою очередь, есть дети?Возможно, JTree, который позволит одновременно просматривать как родительские, так и дочерние действия, использовать «CardLayout» для переключения между представлениями на основе кликов на узлах дерева. – copeg

ответ

2

У меня есть аналогичный стиль меню в одном из моих приложений. Я хотел бы сделать одно из следующих действий:

  1. Для лучшей организации я бы переместить ваши второй JTabbedPane другого JFrame и поменять код из. Это будет быстро, не даст вам новых функций, но сделает ваш код более легким для отслеживания.
  2. Как показал другой плакат, вы можете сделать обе вкладки выше. Это разделило бы код и предоставило бы пользователю функциональность перехода «Up level» без необходимости «возвращаться».
  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

, поэтому в ваших примерах theres только 1 .java-файл для jframe с jtabbedpane, а jtabbedpane имеет mutiple jtabbedpanes, добавленный в него? –

+0

Да, вы правы –

+0

'changeitemname.setLayout (null);' Java GUIs должны работать на разных ОС, размер экрана, разрешение экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

 Смежные вопросы

  • Нет связанных вопросов^_^