Мне нужно очистить JPanel
. Этот JPanel
под названием mainPane
имеет GridLayout
, который содержит JScrollPane's, and these
JScrollPane s contain custom
JPanel s that override
paintComponent() `.Объект перерисовывается даже после удаления
Независимо от того, что я пытаюсь устанавливающим список в нуль, заменив старый экземпляр с новым объектом, как только я изменить размер рамки окна, вид в paintComponent()
прибудет никогда звонил и снова рисует точку внутри mainPane
.
public void createContentPane()
{
gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS);
graphicViewList = new ArrayList<View>();
for (int i = 0; i < graphicViewList.size(); i++) {
View v = graphicViewList.get(i);
v = null;
}
mainPane = new JPanel();
clearGrid();
mainPane.removeAll();
mainPane.validate();
graphicViewList.clear();
imageModel.deleteObservers();
mainPane.setLayout(gridLay);
this.getContentPane().remove(mainPane);
this.getContentPane().add(mainPane, BorderLayout.CENTER);
mainPane.revalidate();
mainPane.repaint();
}
public void createViews()
{
int idx = 0;
graphicViewList.clear();
while(idx < NUM_PERSPECTIVE) //iterator?
{
if(idx == 0)
{
graphicViewList.add(new ThumbnailView(this, imageModel));
mainPane.add(new JScrollPane(graphicViewList.get(idx)));
idx++;
continue;
}
graphicViewList.add(new ImageView(this, imageModel));
mainPane.add(new JScrollPane(graphicViewList.get(idx)));
idx++;
}
for (int i = 0; i < graphicViewList.size(); i++)
graphicViewList.get(i).removeFocus();
this.getContentPane().add(mainPane, BorderLayout.CENTER);
}
private void clearGrid()
{
for (int i = 0; i < mainPane.getComponentCount(); i++) {
JScrollPane sP =(JScrollPane) mainPane.getComponent(i);
sP = null;
}
}
createContentPane()
является излишеством, я знаю, я просто в отчаянии. Таким образом, первая функция и вторая функция вызываются в конструкторе GUI. Когда я звоню в createContentPane()
, чтобы заменить старый пользовательский интерфейс (с той же структурой, только другим контентом), как только я изменю размер контейнера, его содержимое нарисовано заново. Единственное различие заключается в том, что на втором createContentPane()
вызывается рисование с размерами по макету, и элементы больше не находятся внутри.
Я бы подумал, что createContentPane()
опустошит все и удалит все ссылки, которые у меня могут быть, но paintComponent()
все еще управляет рисованием полос прокрутки с видами.
Для более эффективной помощи следует отправить сообщение [SSCCE] (http://sscce.org/). –