SwingBuilder, как синтаксис графического интерфейса для Java?

Существует ли библиотека, которая позволяет писать графические интерфейсы на основе Swing, аналогичные тому, как это делает SwingBuilder в Отличный?

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


person Muhammad Alkarouri    schedule 25.10.2010    source источник


Ответы (2)


В какой-то момент я пошел по этому пути, а затем нашел MiGLayout — если я не использую разделенную панель, я вообще могу выложить каждый свой вид в единую панель, с минимумом хлопот. Есть немного кривой обучения, но как только вы преодолеете горб, вы сможете практически мгновенно создать действительно красивый графический интерфейс.

Вся парадигма вложения панелей внутри других панелей не является чистой для многих дизайнов - вы в конечном итоге сражаетесь с менеджером компоновки.

person Kevin Day    schedule 26.10.2010

Я не знаю о такой библиотеке, хотя нечто подобное было бы возможно (правда, без именованных параметров, что снижает читабельность). Кто-то мог преобразовать SwingBuilder в java.

[Похоже, вы можете получить исходный код Java для SwingBuilder по адресу http://kickjava.com/src/groovy/swing/SwingBuilder.java.htm. Я не знаю, насколько это актуально]

Самое близкое, что вы можете сделать в простой java, - это использовать "двойной фигурный трюк" (который на самом деле не является трюком, а просто анонимным определением внутреннего класса).

Пример SwingBuilder на указанной странице:

new SwingBuilder().edt {
    frame(title:'Frame', size:[300,300], show: true) {
    borderLayout()
    textlabel = label(text:"Click the button!", constraints: BL.NORTH) 
    button(text:'Click Me',
           actionPerformed: {
               count++;
               textlabel.text = "Clicked  ${count} time(s).";
               println "clicked"},
               constraints:BL.SOUTH)
    }
}

может быть написано что-то вроде следующего на Java

new JFrame() {{
    setTitle("Frame");
    setSize(300,300);
    setLayout(new BorderLayout());
    textlabel = new JLabel("Click the button!");
    add(textlabel, BorderLayout.NORTH);
    add(new JButton("Click Me") {{
        addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent e) {
                count++;
                textlabel.setText("Clicked " + count + " time(s).");
                System.out.println("clicked");
        }});
    }}, BorderLayout.SOUTH);
    setVisible(true);
}};

ПРИМЕЧАНИЕ. Проблема здесь в том, что при использовании

new SomeClass() {{ ... }}

это фактически создание нового определения класса. Я бы не рекомендовал делать это очень часто из-за этого.

person Scott Stanchfield    schedule 25.10.2010