Как заставить вход сформироваться в коде Java (не Netbeans с помощью JForm)?

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

Что-то вроде этого:

desired form


Мой код

import java.awt.GridLayout;
import javax.swing.*;

class JOptionPaneTest {

public static void main(String[] args) {
    String[] items = {"One", "Two", "Three", "Four", "Five"};
    JComboBox combo = new JComboBox(items);
    JTextField field1 = new JTextField("1234.56");
    JTextField field2 = new JTextField("9876.54");
    JPanel panel = new JPanel(new GridLayout(0, 1));
    panel.add(combo);
    panel.add(new JLabel("Field 1:"));
    panel.add(field1);
    panel.add(new JLabel("Field 2:"));
    panel.add(field2);
   int result = JOptionPane.showConfirmDialog(null, panel, "Test",
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    if (result == JOptionPane.OK_OPTION) {
        System.out.println(combo.getSelectedItem()
            + " " + field1.getText()
            + " " + field2.getText());
    } else {
        System.out.println("Cancelled");
    }
}
}

Моя выходная форма:

current state of form

Я думаю, что должен изменить свое расположение на что-то как BorderLayout. Какие-либо идеи, как получить вид формы во главе вопроса?

16
задан Matthias Braun 8 December 2017 в 16:21
поделиться

3 ответа

Да, вам нужно изменить макет. Посмотрите на SpringLayout и этот пример:

alt text
(источник: sun.com)

String[] labels = {"Name: ", "Fax: ", "Email: ", "Address: "};
int numPairs = labels.length;

//Create and populate the panel.
JPanel p = new JPanel(new SpringLayout());
for (int i = 0; i < numPairs; i++) {
    JLabel l = new JLabel(labels[i], JLabel.TRAILING);
    p.add(l);
    JTextField textField = new JTextField(10);
    l.setLabelFor(textField);
    p.add(textField);
}

//Lay out the panel.
SpringUtilities.makeCompactGrid(p,
                                numPairs, 2, //rows, cols
                                6, 6,        //initX, initY
                                6, 6);       //xPad, yPad

SpringLayout отлично работает для этой простой формы, но есть сторонние библиотеки, которые имеют больше возможностей. Например, MiG Layout.

15
ответ дан 30 November 2019 в 21:35
поделиться

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

Однако вы должны инициализировать его, указав фактическое количество строк и столбцов, которые вам понадобятся. В вашем случае:

new GridLayout(0, 2); 

0 для строк означает, что ограничений нет, и у вас есть 2 столбца, один для меток, а другой для входного компонента. См. учебник по Java для получения дополнительной информации о GridLayouts.

alt text
(источник: sun.com )

Обратите внимание, однако, что GridLayout сделает все «ячейки» одинакового размера, что может быть проблемой для меток.

Однако Джонас прав, SpringLayout , вероятно, более адаптирован к вашим потребностям.

2
ответ дан 30 November 2019 в 21:35
поделиться

Это можно сделать с помощью DesignGridLayout . Следующий фрагмент должен работать (извините, я не смог его протестировать, я сейчас не на своей станции разработчика):

DesignGridLayout layout = new DesignGridLayout(panel);
layout.row().grid(streetAddressLabel).add(streetAddressField);
layout.row().grid(cityLabel).add(cityField);
layout.row().grid(stateLabel).add(stateSpinner);
layout.row().grid(zipLabel).add(zipField);
layout.emptyRow();
layout.row().right().add(setAddressButton, clearAddressButton);

Тогда вы должны использовать JDialog (вместо JOptionPane ) для отображения ваша панель .

-1
ответ дан 30 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: