Панель прокрутки Java Swing в NetBeans - PullRequest
2 голосов
/ 13 января 2010

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

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

  1. Щелкните правой кнопкой мыши JPanel и вложите в область прокрутки. Не работает.
  2. Прочитав несколько примеров, я понял, что у меня должен быть JPanel в качестве аргумента для конструктора JScrollPane. Что я и сделал, щелкнув правой кнопкой мыши на ScrollPane и CustomizeCode. Поскольку, очевидно, автоматически сгенерированный код защищен в NetBeans, и я не могу просто изменить все эти объявления и т. Д. Вручную. Все еще не работает.
  3. Я пытался установить PreferedSize в NULL для JPanel и / или JScrollPane, не помогло.
  4. JScrollPane - это дочерний элемент, назовем его TabJPanel (который, в свою очередь, является вкладкой TabbedPane). Я пытался возиться с их отношениями, в основном пытаясь всеми возможными способами установления родства между JFrame, JPanel (держа текстовые поля), TabJPanel и JScrollPane, но ничего не получалось.
  5. Я также сделал VerticalScrollBar «всегда видимым» на всякий случай. Итак, я вижу полосу прокрутки, просто заполнение этой JPanel JTextFields не влияет на нее.
  6. Когда имеется слишком много полей JTextFields I, они переходят «ниже» нижней границы 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();

Извините за длинное сообщение, я просто пытаюсь предоставить как можно больше информации, потому что, будучи новичком, я не знаю, что именно уместно, а что нет. Заранее спасибо:)

Ответы [ 3 ]

2 голосов
/ 13 января 2010

Поскольку сейчас есть другой ответ, я тоже добавляю свое предложение.

Это звучит как проблема использования JTable с одним столбцом. JList еще не редактируется (и может никогда не быть).

JTable поможет решить проблемы с компоновкой, и вы сможете легко получить доступ к значениям из таблицы.

Используйте свой собственный TableModel (простого Vector должно быть достаточно в вашем случае) и добавьте к нему значения.

0 голосов
/ 26 мая 2013

Я делаю так, чтобы добавить область прокрутки, создать панель и заполнить ее несколькими компонентами, а затем создать панель прокрутки в компоненте, который вы хотите добавить, вырезать и вставить панель, в которую будут помещены все ваши данные и изменить их размер the scrollpane. Так как компоненты занимают больше места, чем один видимый щелчок правой кнопкой мыши на scrollpane и выбирает дизайн этого контейнера, вы можете увеличить размер scrollpane и добавить столько компонентов, сколько у вас есть.

0 голосов
/ 13 января 2010

У вас есть возможность использовать LayoutManager вместо установки границ непосредственно для компонентов. Чтобы проверить это, простой одиночный столбец GridLayout с выравниванием по вертикали должен доказать концепцию.

panel.setLayout(new GridLayout(0,1));

ноль в параметре rows позволяет добавлять строки в макет по мере необходимости.

...