Самый легкий путь состоит в том, чтобы установить фокус где-нибудь. Можно сразу задержать фокус, но установка фокуса где угодно инициирует LostFocus-событие на любом типе управления и заставит его обновить свой материал:
IInputElement x = System.Windows.Input.Keyboard.FocusedElement;
DummyField.Focus();
x.Focus();
Иначе должен был бы получить сфокусированный элемент, получить обязательный элемент от сфокусированного элемента и инициировать обновление вручную. Пример для TextBox и ComboBox (необходимо было бы добавить любое управление, вводит Вас, должен поддерживать):
TextBox t = Keyboard.FocusedElement as TextBox;
if ((t != null) && (t.GetBindingExpression(TextBox.TextProperty) != null))
t.GetBindingExpression(TextBox.TextProperty).UpdateSource();
ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();
Если это Swing для размещения полей в контейнере следует использовать диспетчер макета .
Разрыв строки не поможет при размещении объектов Swing; вам нужно разместить макет на центральной панели JPanel. То есть в центре вашего макета границы должен быть один объект Swing, JPanel, и вы должны установить его в стиле, который позволяет вам складывать каждый виджет. GridLayout (6,1) может это сделать.
Вы можете использовать менеджеры компоновки, такие как GridLayout или GridBagLayout . Хотя последний рекомендуется только для кода, сгенерированного генераторами графического интерфейса, я предпочитаю его, потому что он дает мне наибольшую гибкость.
JPanel panel = new JPanel();
GridBagLayout layout = new GridBagLayout();
panel.setLayout(layout);
layout.add(label1, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area1, new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(label2, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area2, new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(label3, new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
layout.add(area3, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(area1);
panel.add(area2);
panel.add(area3);
Конечно, это выглядит некрасиво, но должно помочь вам начать.
Вы также можете злоупотребить BorderLayout :
JPanel panel = new JPanel(new BorderLayout());
JPanel topRow = new JPanel();
panel.add(topRow, BorderLayout.PAGE_START);
topRow.add(label1);
topRow.add(area1);
JPanel middleRowBox = new JPanel(new BorderLayout());
panel.add(middleRowBox, BorderLayout.CENTER);
JPanel middleRow = new JPanel();
middleRowBox.add(middleRow, BorderLayout.PAGE_START);
middleRow.add(label2);
middleRow.add(area2);
JPanel bottomRowBox = new JPanel();
middleRowBox.add(bottomRowBox, BorderLayout.CENTER);
JPanel bottomRow = new JPanel();
bottomRowBox.add(bottomRow, BorderLayout.PAGE_START);
bottomRow.add(label3);
bottomRow.add(area3);
bottomRowBix.add(new JPanel(), BorderLayout.CENTER);
Попробуйте использовать GridLayout для начала:
panel.setLayout(new GridLayout(0,2));
// the order of added components is important
panel.add(labelA);
panel.add(textAreaA);
panel.add(labelB);
panel.add(textAreaB);
...
Выглядит не очень красиво, но помогает начать.
Если вы не установите LayoutManager для новой панели, он будет использовать FlowLayout, который ведет себя как макет HTML. Но в FlowLayout нет такой вещи, как предполагаемый разрыв строки. Он просто будет помещать компонент за компонентом, пока не достигнет конца доступного пространства, а затем начнет новую строку.
Если вам нужен контроль над макетами - не используйте FlowLayout.
Менеджеры макетов, о которых вы, возможно, захотите познакомиться, это:
Есть и другие, но эти три должны позволить вам разметить 95% ваших панелей.