Я хочу заставить вход сформироваться в Java так, чтобы пользователь мог ввести детали.
Что-то вроде этого:
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");
}
}
}
Моя выходная форма:
Я думаю, что должен изменить свое расположение на что-то как BorderLayout
. Какие-либо идеи, как получить вид формы во главе вопроса?
Да, вам нужно изменить макет. Посмотрите на SpringLayout и этот пример:
(источник: 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.
В настоящее время вы используете GridLayout, который может быть подходящим для ваших нужд.
Однако вы должны инициализировать его, указав фактическое количество строк и столбцов, которые вам понадобятся. В вашем случае:
new GridLayout(0, 2);
0 для строк означает, что ограничений нет, и у вас есть 2 столбца, один для меток, а другой для входного компонента. См. учебник по Java для получения дополнительной информации о GridLayouts.
(источник: sun.com )
Обратите внимание, однако, что GridLayout сделает все «ячейки» одинакового размера, что может быть проблемой для меток.
Однако Джонас прав, SpringLayout , вероятно, более адаптирован к вашим потребностям.
Это можно сделать с помощью 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
) для отображения ваша панель
.