Подходящий шаблон проектирования для добавления компонентов во внутренний фрейм с помощью Groupplayout

#java #design-patterns #grid-layout #jinternalframe #grouplayout

#java #шаблоны проектирования #grid-layout #jinternalframe #groupplayout

Вопрос:

Недавно я создал шаблон внутреннего окна, который реализован в каждом окне. Я использовал GridLayout для компонентов, но мне не нравится результат. Итак, я решил создать шаблон, используя сгенерированный код из NetBeans (пока шаблон шаблона). Простое окно, в котором ничего нет.

 private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 517, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 307, Short.MAX_VALUE)
    );
}
  

Читая больше о GroupLayout , я понял, что я не могу добавлять компоненты так же легко, как с помощью GridLayout или FlowLayout . Возможно, мне придется каждый раз заменять компоненты или изменять видимость и т.д…Предположим, я все еще хочу использовать GroupLayout , какой шаблон является лучшим для добавления компонентов в это окно? Должен ли я «мигрировать» из шаблона шаблона в декоратор? Если да, то как я должен это сделать? Каково ваше мнение? Заранее благодарю вас.

РЕДАКТИРОВАТЬ: Мой прежний код делал эти вещи:

 public abstract class InternalWindowTemplate{
private int internalWindowCounter = 0;
private final int xOffset = 30;
private final int yOffset = 30;
Container container;
GridLayout gridLayout;
JInternalFrame internalFrame;
GroupLayout internalFrameLayout;

//    overriden methods
public InternalWindowTemplate(String title, boolean isResizable, boolean isClosable, boolean isMaximizable, boolean isIconifiable, int width, int height, int gridRows, int gridColumns){
    internalFrame = new JInternalFrame(title, isResizable, isClosable, isMaximizable, isIconifiable);
    setContainer();
    setGridLayout(gridRows, gridColumns);
    setInternalWindowSize(width, height);
    setInternalWindowLocation(xOffset, yOffset);
}

public void setContainer(){
     container = internalFrame.getContentPane();
}

public Container getContainer(){
    return container;
}

public void setInternalWindowCloseOperation(){
    internalFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
}

public JInternalFrame showInternalFrame(){
    internalFrame.setVisible(true);
    setInternalWindowCloseOperation();
    return internalFrame;
}

public void closeInternalFrame(){
    internalFrame.dispose();
}


public void addComponentToInternalWindow(Component component){
    getContainer().add(component);
    pack();
}

public void pack(){
    internalFrame.pack();
}

public abstract void addComponentsToInternalWindow();

public void setGridLayout(int rows, int columns){
//        I use gridLayout for internal windows
    gridLayout = new GridLayout(rows, columns);
    getContainer().setLayout(gridLayout);
}
}
  

Комментарии:

1. Прочитайте , как использовать Groupplayout . Не существует жесткого правила, позволяющего определить наилучший шаблон для добавления компонентов в окно. Это полностью зависит от пользовательского интерфейса приложения. Используйте любой макет, который соответствует дизайну. Пожалуйста, поделитесь снимком пользовательского интерфейса.

2. Я использовал GridLayout для компонентов, но мне не нравится результат. Можем ли мы помочь вам разобраться с проблемой результата?

3. Если бы у меня было внутреннее окно с несколькими компонентами, которые я хочу привести в порядок? Как бы я каждый раз менял эти «добавления» в Groupplayout?

4. Используйте FlowLayout вместо Groupplayout в том случае, если вы хотите добавлять в порядке слева направо. Я предлагаю посетить визуальное руководство для менеджеров компоновки

5. Да, @ Braj, я хочу иметь точный порядок компонентов для моего результата. GridLayout помог мне не так сильно, как Groupplayout, но я не могу понять, как обрабатывать добавление компонентов.