Swing Layout не отображается должным образом - PullRequest
1 голос
/ 11 июня 2019

Я делаю графический интерфейс в Swing, и в качестве макета я использую разные классы просто для того, чтобы придерживаться структуры MVC.

В моем классе Main.class я создал макет в Swing, чтобы показать панель меню и панель инструментов, она работает отлично, но как-то не отображается правильно. Единственное, что я заметил, - это «граница» из JToolBar, но ни одна из кнопок, которые я вставил в нее, заставляет меня думать, что есть проблема при правильном выводе ее на правильную панель / фрейм.

    JFrame frame = new JFrame("Title");
    JPanel panel = new JPanel();

    frame.setJMenuBar(new MenuBar());

    JToolBar toolbar = new ToolBar();


    GroupLayout panelLayout = new GroupLayout(panel);
    panel.setLayout(panelLayout);
    panelLayout.setHorizontalGroup(
            panelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGap(0, 0, Short.MAX_VALUE)
    );
    panelLayout.setVerticalGroup(
            panelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGap(0, 400, Short.MAX_VALUE)
    );

    GroupLayout layout = new GroupLayout(frame.getContentPane());
    frame.getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(toolbar, GroupLayout.DEFAULT_SIZE, 900, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                            .addComponent(panel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(toolbar, GroupLayout.PREFERRED_SIZE, 39, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(22, Short.MAX_VALUE))
    );

    frame.pack();
    frame.setLocationRelativeTo (null); // Center on screen.
    frame.setVisible(true);
}

}

1 Ответ

0 голосов
/ 11 июня 2019

Я использую разные классы только для того, чтобы придерживаться структуры MVC.

По этой причине нет необходимости использовать разные классы. Дело не в MVC.

Единственное, что я замечаю, это 'граница' из JToolBar, но ни одна из кнопок, которые я вставил в нее

Ну, мы ничего не можем поделать, потому что понятия не имеем, чем занимается ваш ToolBar класс.

Мое предложение - забыть об использовании IDE для генерации вашего кода GUI. Сгенерированный код невозможно прочитать и его невозможно сохранить.

То, что вы хотите сделать, так просто, если вы вручную создадите графический интерфейс.

Для отображения панели инструментов базовый код будет:

frame.add(new ToolBar(), BorderLayout.PAGE_START);

Это одна строка кода по сравнению со всем кодом, сгенерированным IDE.

И тогда для главной панели у вас будет:

JPanel panel = new JPanel();
panel.add( someComponent );
frame.add(panel, BorderLayout.CENTER);

Прочитайте раздел из учебника по Swing на Как использовать BorderLayout для полного примера.

...