Swing Scrollpane Java в NetBeans
-
20-09-2019 - |
Вопрос
У меня есть приложение Java, которое добавляет JTextFields @ Runtime в JPanel. В основном пользователь нажимает кнопку, и добавляется новый JTextField, снова добавлено снова ...
Каждый новый JTextField находится прямо ниже предыдущего. Очевидно, что у меня не хватает пространства довольно скоро, поэтому я пытаюсь использовать jscrollpane, и вот где, черт возьми, начинается, потому что это просто не работает, независимо от того, что я пытаюсь.
- Щелкните правой кнопкой мыши на JPanel и приложите на панель прокрутки. Не работал.
- После прочтения некоторых примеров я понял, что я должен иметь JPanel в качестве аргумента для конструктора JScrollPane. Что я сделал, щелкнув правой кнопкой мыши на ScrollPane и CustomieCode. Потому что, по-видимому, автоматически генерируемый код защищен в NetBeans, и я не могу просто изменить все эти объявления и т. Д. Вручную. Все еще не работает.
- Я попытался установить предпочтительность для null для jpanel и/или jscrollpane, не помог.
- JScrollpane - это ребенок, давайте называть это TabjPanel (которая, в свою очередь, является вкладками с вкладками). Я пытался возиться с их отношениями, в основном пробуя каждый возможный способ родителей между JFrame, JPanel (Holding TextFields), TabjPanel и JScrollPane, но ничего не сработало.
- Я также сделал VerticalScrollbar «всегда виден» только в случае. Поэтому я вижу прокрутку, просто то, что JPanel с JTextFields не влияет на это.
- Когда слишком много JTextFields я идут «ниже» нижней границы JPanel, и я больше не вижу их.
Код для добавления новых JTextFields такой, в случае, если он актуален.
JTextField newField = new JTextField( columns );
Rectangle coordinates = previousTextField.getBounds();
newField.setBounds(coordinates.x , coordinates.y + 50, coordinates.width, coordinates.height);
JPanel.add(newField);
JPanel.revalidate();
JPanel.repaint();
Извините за длинный пост, я просто пытаюсь предоставить как можно больше информации, потому что, будучи новичком, я не знаю, что точно актуально, а что нет. Заранее спасибо :)
Решение
Поскольку сейчас есть еще один ответ, я тоже добавляю свое предложение.
Это звучит как проблема с использованием JTable
с одним столбцом. JList
является еще не редактируется (и может никогда не быть).
JTable
Образует проблемы с макетом для вас, и вы можете легко получить доступ к значениям через таблицу.
Используй свой собственный TableModel
(простой Vector
должно быть достаточно в вашем случае) и добавить к нему значения.
Другие советы
Вариант, который у вас есть, - использовать Layoutmanager, вместо того, чтобы устанавливать границы непосредственно на компонентах. Чтобы проверить это, простой отдельный столбец Макет сетки С выравниванием, установленным на вертикали, должно доказать концепцию.
panel.setLayout(new GridLayout(0,1));
ноль в rows
PARAM позволяет добавлять ряды в макет по мере необходимости.
Я делаю так, чтобы добавить Scrollpane, создать панель и заполнить ее несколькими компонентами, а затем создавать Scrollpane в компоненте, который вы хотите добавить, вырезать и вставить панель, в которую все ваши данные попадут и изменят размер ScrollPane. Поскольку компоненты занимают большее пространство, чем то, что видимо, щелкните правой кнопкой мыши на прокрутке и выберите разработку этого контейнера, вы можете увеличить размер ScrollPane и добавить столько компонентов, сколько у вас.