#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, но я не могу понять, как обрабатывать добавление компонентов.