2012-05-30 2 views
0

Я ищу использовать шаблон Factory Method, чтобы сделать разработку моего Swing UI более быстрой и удобной.Swing GUI Factory Method Pattern

В целом, это приложение MDI, использующее JInternalFrames. У меня есть множество настроек, типов, как я их называю, в системе (например, userTypes, accountTypes и т. Д.) У меня есть фиксированный интерфейс, который я решил использовать. Дело в том, что в системе более 50 таких типов, поэтому модель заводского метода представляется наиболее управляемым решением. Ниже приведены два скриншота рабочего приложения.

main part of a record enter image description here

Я смотрел на [пример] [3], но так как я не смогу оценить количество вкладок я потребуется хранить всю информацию в записи, я должен был бы быть в эти вкладки можно добавить несколько вкладок и элементов управления (ярлыки, текстовые поля, таблицы, выпадающие списки и т. д.).

На основании примера можно ли создать JTabbedPane в абстрактном классе и изменить и добавить к нему в подклассах? Я попробовал следующее, и я немного потерял:

public AbstractTypeInternalFrame(String title) { 
     setBounds(100, 100, 808, 589); 

     JToolBar toolBar = new JToolBar(); 
     getContentPane().add(toolBar, BorderLayout.NORTH); 

     JButton btnAdd = new JButton("Add"); 
     toolBar.add(btnAdd); 

     JButton btnSave = new JButton("Save"); 
     btnSave.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
      } 
     }); 
     toolBar.add(btnSave); 

     JButton btnDelete = new JButton("Delete"); 
     toolBar.add(btnDelete); 

     JButton btnCancel = new JButton("Cancel"); 
     btnCancel.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     toolBar.add(btnCancel); 

     JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane()); 
     getContentPane().add(recordTabs, BorderLayout.NORTH); 

     JSeparator recordSearchSeparator = new JSeparator(); 
     getContentPane().add(recordSearchSeparator, BorderLayout.NORTH); 



    } 

    protected abstract int makeRecordTabPane(); 

с методом makeRecordTabPane() требует, чтобы вернуть Int.

Как вы можете видеть, я немного потерялся и мне просто нужно какое-то направление относительно того, как действовать с таким шаблоном. Если у кого-нибудь есть какие-либо советы или даже примеры/ссылки, это было бы очень признательно.

Я понимаю, что мой вопрос неясен, поэтому, если на моей стороне требуется какое-либо разъяснение, пожалуйста, не стесняйтесь спрашивать.

С уважением.

+1

По крайней мере, ответьте на хороший ответ коровы в своем [предыдущем вопросе] (http://stackoverflow.com/questions/10246511/mvc-implementation-of-java-swing-focuslistener), учитывая сколько усилий он потратил на то, чтобы помочь вам. И тогда да, пожалуйста, попытайтесь прояснить этот вопрос. Начните с того, что мы ничего не знаем о вашей программе и что мы не можем видеть код, который не показан, и не читайте умы. –

+1

См. Также [* Пункт 1: Рассмотрите статические заводские методы вместо конструкторов *] (http://www.drdobbs.com/jvm/208403883). – trashgod

+0

читайте это: http://stackoverflow.com/questions/15202590/using-factory-pattern-in-java –

ответ

0

Вот вопрос более подробно.

Итак, я ищу, чтобы создать простой JInternalFrame для операций CRUD по записям в системе. Такие записи, как пользователи, типы пользователей, учетные записи, учетные записи и т. Д. В системе более 50 таких типов, поэтому я полагаю, что использование шаблона фабричных методов сделает все эти JInternalFrames более управляемыми.

Ниже приведен пример записи пользователя:

Link1 Link2

Верхняя половина представляет из деталей записи, которые разделены на вкладки в зависимости от содержания записи. В некоторых записях может быть только одна вкладка, а у других более крупных - несколько. Поэтому содержимое JTabbedPane должно создаваться на уровне подкласса и на this example.

В нижней части мы будем искать записи этого типа. Скажем, например, в опубликованных ссылках открывается User Manager JInternalFrame. Затем мы будем искать пользователей в соответствии с именем пользователя и/или идентификатором пользователя. Результаты отображаются в приведенной ниже таблице и при двойном нажатии на результат поиска запись отображается выше в JTabbedPane.

Кнопки добавления, сохранения, удаления и отмены затем используются для выполнения операций CRUD над тем, что введено в запись.

Исходя из этого, мы можем сказать, что аспекты дизайна, чем необходимость быть реализован с помощью подклассов:

1) Размер JInternaFrame 2) Все содержимое JTabbedPane: не из сухотка, таблиц, метки, текстовые поля и т. д. 3) Количество столбцов в результатах поиска JTable: мы можем изменить, создав экземпляр JTable Header.

В начале я пытался создать класс Abstract с помощью JTabbedPane и добавить компоненты в JTabbedPane, чтобы посмотреть, как я могу это сделать. Это код, который я опубликовал ранее. Этот файл был сгенерирован с использованием WindowBuilder, который я позже модифицировал:

package zm.co.freight.fpsManagementGUI.view; 

import java.awt.EventQueue; 

public abstract class AbstractTypeInternalFrame extends JInternalFrame { 

    /** 
    * Launch the application. 
    */ 
// public static void main(String[] args) { 
//  EventQueue.invokeLater(new Runnable() { 
//   public void run() { 
//    try { 
//     AbstractTypeInternalFrame frame = new AbstractTypeInternalFrame(); 
//     frame.setVisible(true); 
//    } catch (Exception e) { 
//     e.printStackTrace(); 
//    } 
//   } 
//  }); 
// } 

    /** 
    * Create the frame. 
    */ 
    public AbstractTypeInternalFrame(String title) { 
     setBounds(100, 100, 808, 589); 

     JToolBar toolBar = new JToolBar(); 
     getContentPane().add(toolBar, BorderLayout.NORTH); 

     JButton btnAdd = new JButton("Add"); 
     toolBar.add(btnAdd); 

     JButton btnSave = new JButton("Save"); 
     btnSave.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
      } 
     }); 
     toolBar.add(btnSave); 

     JButton btnDelete = new JButton("Delete"); 
     toolBar.add(btnDelete); 

     JButton btnCancel = new JButton("Cancel"); 
     btnCancel.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     toolBar.add(btnCancel); 

     JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane()); 
     getContentPane().add(recordTabs, BorderLayout.NORTH); 

     JSeparator recordSearchSeparator = new JSeparator(); 
     getContentPane().add(recordSearchSeparator, BorderLayout.NORTH); 



    } 

    protected abstract int makeRecordTabPane(); 

} 

Вопрос в том, я на правильном пути? Как мне подойти к нему, используя шаблон фабричного метода, поскольку я, похоже, не очень хорошо его понимаю. Я видел более простые примеры с фигурами и рисунками, но немного потерял с интерфейсами Swing. Есть хороший пример, на который вы могли бы направить меня или простой пример, чтобы указать мне в правильном направлении ... вот все, о чем я просил. Извините, если он был расплывчатым ...

+0

Это пространство обычно зарезервировано для вопросов - StackOverflow является Q & A веб-сайтом. Вы можете добавить это к своему вопросу с помощью редактирования. –