Вопрос

У меня есть приложение Java, которое добавляет JTextFields @ Runtime в JPanel. В основном пользователь нажимает кнопку, и добавляется новый JTextField, снова добавлено снова ...

Каждый новый JTextField находится прямо ниже предыдущего. Очевидно, что у меня не хватает пространства довольно скоро, поэтому я пытаюсь использовать jscrollpane, и вот где, черт возьми, начинается, потому что это просто не работает, независимо от того, что я пытаюсь.

  1. Щелкните правой кнопкой мыши на JPanel и приложите на панель прокрутки. Не работал.
  2. После прочтения некоторых примеров я понял, что я должен иметь JPanel в качестве аргумента для конструктора JScrollPane. Что я сделал, щелкнув правой кнопкой мыши на ScrollPane и CustomieCode. Потому что, по-видимому, автоматически генерируемый код защищен в NetBeans, и я не могу просто изменить все эти объявления и т. Д. Вручную. Все еще не работает.
  3. Я попытался установить предпочтительность для null для jpanel и/или jscrollpane, не помог.
  4. JScrollpane - это ребенок, давайте называть это TabjPanel (которая, в свою очередь, является вкладками с вкладками). Я пытался возиться с их отношениями, в основном пробуя каждый возможный способ родителей между JFrame, JPanel (Holding TextFields), TabjPanel и JScrollPane, но ничего не сработало.
  5. Я также сделал VerticalScrollbar «всегда виден» только в случае. Поэтому я вижу прокрутку, просто то, что JPanel с JTextFields не влияет на это.
  6. Когда слишком много 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 и добавить столько компонентов, сколько у вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top