Java Swing: SpringLayout в BorderLayout

У меня проблемы с моим GridLayout, из-за чего JTextField расширяется, чтобы соответствовать записи, превышающей первоначальный размер. Другому автору с этой проблемой сказали, что SpringLayout — самое простое решение, поэтому я и пытаюсь это сделать. Однако у меня проблемы с отображением этой панели.

У меня есть верхняя, нижняя, левая и правая панели, каждая с разными макетами, которые установлены на панели верхнего уровня (единственной в этом фрейме). Этот SpringLayout, который я пытаюсь, должен быть на правой панели (добавлен на верхнюю панель как topPanel.add(springPanel, BorderLayout.EAST - так я делал, когда эта панель была GridLayout). Код ниже смоделирован после учебник SpringLayout Oracle Извините, я новичок в этом макете и использую его только для использования фиксированной ширины для JTextFields.

JPanel testPanel = new JPanel();
SpringLayout layout = new SpringLayout();
testPanel.setLayout(layout);
JLabel label = new JLabel("First field: ");
JTextField field = new JTextField("enter text");

testPanel.add(label);
testPanel.add(field);

layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, testPanel);
layout.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, testPanel);
layout.putConstraint(SpringLayout.WEST, field, 5, SpringLayout.EAST, label);
layout.putConstraint(SpringLayout.NORTH, field, 5, SpringLayout.NORTH, testPanel);

...

topPanel.add(testPanel, BorderLayout.EAST);

Любое руководство будет оценено. Спасибо.

EDIT: кажется, что добавление аргумента cols не работает, но я буду продолжать попытки. Та же проблема существует с GridBagLayout. Переход к следующему полю не изменяет размер предыдущего поля, но щелчок за пределами этих полей в другом месте фрейма приводит к увеличению длины содержащегося в нем текста, чего мне нужно избегать. И у меня недостаточно представителей, чтобы публиковать изображения того, что я делаю

EDIT2: добавление столбцов работает - я пробовал это в какой-то момент. Не совсем уверен, как это работает, но любое значение (проверено 1, 10, 15), кажется, фиксирует длину, поэтому выход из фокуса этой панели больше не приводит к изменению размера. Спасибо!


person Developer3310    schedule 28.12.2014    source источник
comment
SpringLayout кодируется вручную никогда легко.   -  person PM 77-1    schedule 28.12.2014
comment
JTextField field = new JTextField("enter text");, вероятно, должно быть чем-то вроде JTextField field = new JTextField("enter text", cols);, где cols — это количество отображаемых столбцов.   -  person Andrew Thompson    schedule 28.12.2014
comment
1) Чтобы быстрее получить помощь, опубликуйте MCVE (минимальный полный проверяемый пример) или SSCCE (краткий, автономный, правильный пример). 2) Предоставьте ASCII-графику или простой рисунок макета графического интерфейса.   -  person Andrew Thompson    schedule 28.12.2014
comment
am only using it to use fixed widths for JTextFields. — GridBagLayout должен учитывать предпочтительный размер текстового поля. Или вы можете добавить текстовое поле в JPanel с помощью FlowLayout, а затем добавить панель в свой графический интерфейс.   -  person camickr    schedule 28.12.2014


Ответы (1)


Ответ @Andrew Thompson сработал - используйте col arg, чтобы указать количество столбцов (любое число, кажется, работает). Благодарю вас!

person Developer3310    schedule 06.01.2015