Здравствуйте.
Представляю Вашему суду программу-компоновщик для создания окон в проектах под 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'ы и методы для обработки основных событий. В пример присутствует метод обработки нажатия на кнопку.
Хочется сказать отдельное "спасибо" тем, кто придумал так громоздко описывать реакцию на события в java.
Пример задания действия на нажатие кнопки:
В этом окне можно сразу написать свой код.
Таким образом, на примере работы в Eclipse, необходимо только создать в проекте пустой класс с нужным именем, а том генерировать код к нему и скопипастить его в проект. Код работает сразу.
GitHub - код С++ Qt5
GBLayuot - исполняемый файл 64-бит. В связи с тем, что я не уверен, что это много кому нужно, 32 бит не собирал, deb не делал.
P.S.
Да, я знаю, что есть графические IDE для Java. И в Eclipse тоже.