Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: GBLayout - генератор компоновок для Java  (Прочитано 1473 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн viktand

  • Автор темы
  • Участник
  • *
  • Сообщений: 190
    • Просмотр профиля
GBLayout - генератор компоновок для Java
« : 04 Февраля 2016, 14:43:49 »
Здравствуйте.

Представляю Вашему суду программу-компоновщик для создания окон в проектах под Java.

Поясню. Как известно в силу идеологических причин (кросс-платформенность) в java-программах не принято при создании интерфейсов прописывать абсолютные координаты компонентов (хотя и можно). Вместо этого существует группа классов Layout, которые сами раскладывают по окну кнопки, надписи, галки и прочее. Т.е. программист только "высказывает пожелания", а выбранный компоновщик решает "что тут можно сделать". Процесс описания компоновки бывает не так уж прост, особенно, если надо что-то добавить в уже готовый проект.

GBLayout позволяет создать заготовку кода компоновщика просто разложив по окну необходимые компоненты примерно так, как хотелось бы.

Пример:
Окно программы в ходе создания компоновки
(Окно "заготовки" и сетка носят условный характер, т.к. пустые строки и столбцы в проект не попадут)


Результат (уже java)


Код, генерированный GBLayout
// Auto-generated form with GBLayout
       
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
       
public class newForm extends JFrame{
    JButton comp_0;
    JCheckBox comp_1;
    JLabel comp_2;
    JTextField comp_3;
       
    public newForm(){
        // TODO Auto-generated method stub
        super("newForm");  // Еnter here your window title
        setBounds(300, 300, 300, 400);
        create_form();        // Build a form according your project
    }
   
    private void create_form(){
        // TODO Auto-generated method stub
        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(gbl);
        comp_0 = new JButton("button1");
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.anchor  = GridBagConstraints.NORTHWEST;
        c.insets = new Insets(0,0,0,0);
        c.gridheight =1;
        c.gridwidth  =2;
        c.gridx = 0;
        c.gridy = 0;
        c.ipadx = 0;
        c.ipady = 0;
        c.weightx = 1.0;
        c.weighty = 1.0;
        gbl.setConstraints(comp_0, c);
        add(comp_0);
        comp_1 = new JCheckBox("Check this");
        c.fill   = GridBagConstraints.NONE;
        c.anchor  = GridBagConstraints.NORTHWEST;
        c.insets = new Insets(0,0,0,0);
        c.gridheight =1;
        c.gridwidth  =2;
        c.gridx = 0;
        c.gridy = 2;
        c.ipadx = 0;
        c.ipady = 0;
        c.weightx = 1.0;
        c.weighty = 1.0;
        gbl.setConstraints(comp_1, c);
        add(comp_1);
        comp_2 = new JLabel("Label");
        c.fill   = GridBagConstraints.NONE;
        c.anchor  = GridBagConstraints.CENTER;
        c.insets = new Insets(0,0,0,0);
        c.gridheight =1;
        c.gridwidth  =2;
        c.gridx = 0;
        c.gridy = 1;
        c.ipadx = 0;
        c.ipady = 0;
        c.weightx = 1.0;
        c.weighty = 1.0;
        gbl.setConstraints(comp_2, c);
        add(comp_2);
        comp_3 = new JTextField("");
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.anchor  = GridBagConstraints.CENTER;
        c.insets = new Insets(0,0,0,0);
        c.gridheight =1;
        c.gridwidth  =2;
        c.gridx = 0;
        c.gridy = 3;
        c.ipadx = 0;
        c.ipady = 0;
        c.weightx = 1.0;
        c.weighty = 1.0;
        gbl.setConstraints(comp_3, c);
        add(comp_3);
        comp_0.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
                comp_0_onClick();
            }
          });
       
    }
   
    public static void main(String[] args) { // This is only necessary if this form of the whole project starts
        newForm app = new newForm();
        app.setVisible(true);
    }
   
    private void comp_0_onClick() {
            // TODO Auto-generated method stub
           comp_2.setText("press");
    }
}

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

Кроме того, существует возможность сразу вписать Listener'ы и методы для обработки основных событий. В пример присутствует метод обработки нажатия на кнопку.
(Нажмите, чтобы показать/скрыть)
Пример задания действия на нажатие кнопки:


В этом окне можно сразу написать свой код.

Таким образом, на примере работы в Eclipse, необходимо только создать в проекте пустой класс с нужным именем, а том генерировать код к нему и скопипастить его в проект. Код работает сразу.

GitHub - код С++ Qt5

GBLayuot - исполняемый файл 64-бит. В связи с тем, что я не уверен, что это много кому нужно, 32 бит не собирал, deb не делал.

P.S.
Да, я знаю, что есть графические IDE для Java. И в Eclipse тоже.

 

Страница сгенерирована за 0.049 секунд. Запросов: 23.