Вот моя проблема: у меня есть JPanel
, который содержит JTabbedPane
, который имеет JScrollPane
, используя настроенный JPanel
. Проще говоря, я изменяю настроенный JPanel в своей программе, и мне нужны все родительские компоненты, чтобы отразить это изменение. Тем не менее, я понятия не имею, что мне нужно использовать для достижения этой цели. Вот что у меня сейчас:
infoScroller.remove(infoPanel);
this.reevaluateInfoPanel();
infoScroller.setViewportView(infoPanel);
infoScroller.revalidate();
infoScroller.repaint();
, где infoScoller
- это JScrollPane
, а infoPanel
- это настроенное JPanel
.
Это должно было бы перейти от высказывания | Hi! |
(или что-то в этом роде, вы поняли идею) к высказыванию | Bye! |
, но вместо этого оно идет от | Hi! |
до | |
РЕДАКТИРОВАТЬ: под настроенным я имею в виду только то, что он расширяет JPanel, имеет некоторые компоненты и т. Д. ReevaluateInfoPane () устанавливает информационную панель равной новой информационной панели на основе новой информации. Я знаю, что reevalutateInfoPanel () делает то, что я хочу, так как я могу сказать, что это новый JFrame, и это правильно ... вот код в любом случае ... это, вероятно, запутает больше, чем помощь, так как это действительно не нужно ...
private void reevaluateInfoPanel(){
infoPanel = new JPanel();
GridLayout gl = new GridLayout(infoNum, 1);
infoPanel.setLayout(gl);
//Create a display panel for every info block available
DisplayPanel[] panels = new InfoViewer[infoList.length];
for(int i = 0; i < panels.length; i++){
panels[i] = new InfoViewer(infoList[i]);
}
//Assign a new SelectionPanel for every info selection necessary
for(int i = 0; i < infoNum; i++){
infoPanel.add(new SelectionPanel(panels, "info"));
}
}
ОБНОВЛЕНИЕ: Я выяснил, что проблема где-то с JTabbedPane
, который не рендерит обновленный JScrollPane
. Вместо этого он просто удаляет его полностью, когда я revalidate
и repaint
это (JTabbedPane
).