2015-06-10 8 views
1

Похожие на этот вопрос: Dynamically adding JTable to JScrollPaneДинамическое добавление к JTable: JScrollPane

Я пытаюсь добавить JTable каждый раз, когда пользователь нажимает на кнопку. Во-первых, моя проблема была такой же, как и в этом вопросе; ничего не отображалось бы, как только я использовал getViewport, я мог бы отобразить его, но теперь я не вижу ни одной из моих кнопок.

У меня должны быть кнопки выше и ниже каждого JTable. (они также находятся в панели прокрутки. Я предполагаю, что они удалены, потому что getViewport получит всю панель прокрутки (которую я вижу) и поставлю JTable поверх нее).

Зачем нужно getViewport()? Я просто могу сделать то, что хочу, если просто изменить JTable для JButton, например.

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

Итак, чтобы подвести итог: как я могу использовать кнопки в JScrollPane для добавления JTables в ту же JScrollPane?

Благодарим за помощь.

Редактировать: Действие, которое происходит, когда пользователь нажимает кнопку: Кнопка работает правильно, добавляется каждый клик, но таблицы никогда не появляются.

public void actionPerformed(ActionEvent e) 
    { 
     JTableList.add(new JTable(getModel())); 
     panelClass.this.panel.add(JTableList.get(JTableList.size()-1)); 
     panelClass.this.panel.add(new JButton("test")); 

     panelClass.this.validate(); 
     panelClass.this.repaint(); 
    } 
+0

1. для лучшей помощи скорее опубликуйте SSCCE/MCVE, короткую, выполнимую, компилируемую, 2. повторно используйте модель, замените модель, вместо удаления/добавления нового JTable во время выполнения – mKorbel

+0

@mKorbel Я не хочу заменять, хотя , Я хочу продолжать добавлять JTables (с разными моделями). В scrollpane у меня есть только две кнопки, при нажатии любой из них будет добавлена ​​таблица с соответствующей моделью, а также еще две кнопки. для добавления JTable до или после каждого JTable. Две кнопки предназначены для того, чтобы получить модель таблицы по-разному. – Aequitas

+0

см. JTable.setModel() – mKorbel

ответ

0

Кажется, что JTable должен находиться в панели прокрутки сам по себе.

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

См Фрагмент кода:

public void actionPerformed(ActionEvent e) 
{ 
    JTableList.add(new JTable(getModel())); 
    JScrollPane tableContainer = new JScrollPane(JTableList.get(JTableList.size()-1)); 
    panelClass.this.panel.add(tableContainer); 
    panelClass.this.panel.add(new JButton("test")); 

    panelClass.this.validate(); 
    panelClass.this.repaint(); 
} 

Только проблема в том, что список таблиц не будет прокручиваться при наведении курсора мыши на любой из таблиц. См. Здесь: Why JScrollPane does not react to mouse wheel events? для решения этой проблемы.

+0

Это не ответ; отредактируйте свой вопрос, чтобы включить [полный пример] (http://stackoverflow.com/help/mcve), в котором показан ваш пересмотренный подход. – trashgod

+1

@trashgod Как это не ответ? «Сначала добавьте его в новую панель JScrollPane, а затем добавьте эту панель прокрутки на панель« Выполнение этого так будет работать ». Отредактировано, чтобы показать фрагмент кода этого – Aequitas

+0

«JTable» необходимо _not_ быть в панели прокрутки отдельно. Вы указываете, что «это должно работать», но никто не может сказать без [полного примера] (http://stackoverflow.com/help/mcve), по просьбе нескольких корреспондентов.'JTable' обрабатывает сами события мыши, вызывая прокрутку до тех пор, пока не сдвинутся фокус. Поскольку вы включили мой одновременный проголосовавший [ответ] (http://stackoverflow.com/a/30753280/230513), предлагающий 'validate()', я отложу модератору, на котором будет удаляться ответ. – trashgod

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