2013-10-27 4 views
0

Я использую JTable для графического отображения результатов поиска для приложения, которое я разрабатываю. Мне нужна возможность удалить таблицу, если она больше не нужна, а затем замените ее на новую созданную таблицу. Вот как я в настоящее время добавления таблицы в моей JFrame:Удаление JTable с панели содержимого

userLibrary = new CustomLibrary(users, LIBRARY_WIDTH, LIBRARY_HEIGHT); 
    userLibrary.setOpaque(true); 
    userLibrary.setBounds(LIBRARY_START_X, LIBRARY_START_Y, LIBRARY_WIDTH, LIBRARY_HEIGHT); 
    getContentPane().add(userLibrary); 

Мой заказ Библиотека (который расширяет JPanel) выполняет следующие действия:

public CustomLibrary(LinkedList<User> usernames, int width, int height) { 
    CustomTable table = new CustomTable(userRows,columnNames); 
    table.setPreferredScrollableViewportSize(new Dimension(width, height)); 
    table.setFillsViewportHeight(true); 
    table.setAutoCreateRowSorter(true); 
    JScrollPane scrollPane = new JScrollPane(table); 

    // Add the scroll pane to this panel. 
    add(scrollPane); 
} 

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

getContentPane().remove(userLibrary); 

Но это, кажется, ничего не значит.

Так что мой общий вопрос. Как полностью удалить таблицу из моего JFrame, как только я ее уже создал и нарисовал?

ответ

6

Мне нужна возможность удалить таблицу, если она больше не нужна, а затем замените ее на новую созданную таблицу.

Самый простой способ это просто заменить TableModel в JTable:

table.setModel(yourNewlyCreatedTableModel); 

Нет необходимости создания JTable или JScrollPane.

+0

Работал отлично, спасибо. – pledgehollywood

1

Чтобы удалить и заменить его другим компонентом:

contentPanel.remove(table); 
contentPanel.add(component, BorderLayout.CENTER); 

После добавления/удаления компонентов вы должны сделать:

panel.add(...); 
panel.revalidate(); 
panel.repaint(); // sometimes needed 

Обычно JTable отображается в JScrollPane. Поэтому возможно лучшее решение для использования:

scrollPane.setViewportView(anotherComponent); 
+0

Даже если он отвечает на вопрос, это был «неправильный вопрос». Лучший (безусловно) подход был охарактеризован camickr. –

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