2010-01-13 3 views
2

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

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

  1. Щелкните правой кнопкой мыши по JPanel и Enclose in Scroll Pane. Не работает.
  2. После прочтения некоторых примеров я понял, что должен иметь JPanel в качестве аргумента для конструктора JScrollPane. Что я сделал, щелкнув правой кнопкой мыши на ScrollPane и CustomizeCode. Поскольку, по-видимому, автоматически сгенерированный код защищен в NetBeans, и я не могу просто изменить все эти объявления и т. Д. Вручную. Все еще не работает.
  3. Я попытался установить PreferedSize в null для JPanel и/или JScrollPane, не помог.
  4. JScrollPane - это дочерний элемент let, который можно назвать TabJPanel (который, в свою очередь, является вкладкой TabbedPane). Я пытался испортить свои отношения, в основном старался всячески поддерживать родительские отношения между JFrame, JPanel (холдинг текстовых полей), 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(); 

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

+0

Считаете ли вы использование 'JTable' с одним столбцом? Это будет делать все это автоматически и может облегчить работу с вашими динамическими ценностями. –

+0

«JList» будет таким же хорошим, как один столбец «JTable». – akf

+0

@akf: Я почтительно не согласен. 'JList' не редактируется (см. Http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=2668b0245e0c6ffffffff8c9a141bfd70b62?bug_id=4143856) –

ответ

2

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

Это звучит точно так же, как проблема с использованием JTable с одним столбцом. JList - not yet editable (и, возможно, никогда не будет).

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

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

+0

Большое спасибо, на самом деле JTable с редактируемым контентом подходит для моей цели лучше, чем наличие большого количества текстовых полей :) – Sejanus

0

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

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

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

0

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

Смежные вопросы