2016-05-02 4 views
0

У меня есть таблица, которая растет, когда пользователь вводит данные. То, что я хочу сделать, - это разместить таблицу внутри контейнера определенного типа и добавить полосу прокрутки, которая вручную перемещает представление контейнера при его прокрутке. Я не хочу использовать JScrollPane, потому что я старательно пытался заставить его работать в течение последних нескольких дней. Я только узнал, что он не работает с нулевым макетом, который, кажется, является единственным макетом, который позволяет моей таблице печатать нормально. Поэтому я выбрасываю идею JScrollPane, и вместо этого я пытаюсь реализовать идею программирования полос прокрутки, которые меняют вид внутри переполняющего контейнера. До сих пор я не нашел ничего в Интернете, которое может переместить представление контейнера java. Любые идеи о том, как я могу это сделать?JScrollPane не добавляет полосы прокрутки к динамически растущей таблице

UPDATE:

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

Фон: DataTable - это класс, который я разработал, который расширяет java.awt.Container и содержит сетку, полную JLabels. Этот класс содержит такие методы, как addRow и addCol, которые увеличивают размер контейнера для добавления ячеек, а этот класс также содержит методы для установки значений меток.

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

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each) 
table.setLocation(0, 0); 
JScrollPane scroll = new JScrollPane(table);//scroll pane 
scroll.setLayout(null); 
scroll.setBounds(10, 50, 500, 100); 
scroll.add(table); 
Frame frame = new Frame(); 
frame.add(scroll); 
frame.setLayout(null); 
frame.setSize(600, 500); 
frame.setVisible(true); 
for (int i=0 ; i<20 ; i++) { 
    table.addRow();//add twenty rows to table 
} 

Когда я запускаю этот код, полосы прокрутки не отображаются. Зачем? И как мне это исправить? (Даже когда я удаляю строку, устанавливая макет JSrollPane равным null, код все равно не работает. Фактически, таблица вообще не отображается).

+1

'Поэтому я бросаю идею JScrollPane вне и я вместо того, чтобы пытаться реализовать идею программирования полосы прокрутки, которые я сдвигать взгляд изнутри перетекания container.' Не тратьте время, пытаясь изобретать колесо. Эта базовая поддержка уже существует в Swing. Если что-то не работает, проблема связана с вашим кодом, а не с компонентами Swing. Swing был разработан для использования с менеджерами компоновки. Исправьте свой код, чтобы использовать менеджеры макетов, а затем опубликуйте соответствующий [SSCCE] (http://sscce.org/), если у вас все еще есть проблемы. – camickr

+0

Используйте правильные имена переменных при написании кода. «a, b, c, d ...» ничего не значит. Где находится ваш 'SSCCE'. Код, который вы отправили, НЕ является «SSCCE». Как компилируется ваш опубликованный код. Также «SSCCE» должна быть версией, которая использует диспетчер компоновки. Не используйте нулевой макет !!! – camickr

ответ

0

Я не смог найти проблему, поэтому вместо этого я нашел альтернативное решение, используя java.awt.ScrollPane. Единственное изменение, которое я внес в DataTable, заключалось в том, что теперь он расширяет java.awt.Panel.

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each) 
//table extends java.awt.Panel and it consists a 2D array of Labels which contain text 
//class has methods for adding rows and cols, and methods for setting values etc. 
table.setLocation(0, 0); 
ScrollPane scroll = new ScrollPane();//scroll pane 
scroll.setBounds(10, 50, 500, 100); 
scroll.add(table); 
Frame frame = new Frame(); 
frame.add(scroll); 
frame.setLayout(null); 
frame.setSize(600, 500); 
frame.setVisible(true); 
for (int i=0 ; i<20 ; i++) { 
    table.addRow();//add twenty rows to table 
}