Я создаю поворотную раму, которая динамически меняется.
Вот текущее расположение (я работаю в IntelliJ IDEA) 
Как вы можете видеть, есть главный JPanel
, который имеет JSplitPane
. Внутри JSplitPane
есть один JTree
(слева) и один JTable
(справа).
Итак, когда я щелкнул по корневому узлу JTree
, я хочу заменить JTable
на Editor
, и при щелчке по дочернему узлу эта таблица отобразится там.
public class SessionWindow {
private JFrame mFrame;
private JPanel container;
private JTree tableTree;
private JTable tableDetails;
private JSplitPane jSplitPane;
private JScrollPane jScrollTree;
private JScrollPane jScrollTable;
private JPanel editorPanel;
private Project mProject;
private Disposable parent;
private ClientSocket socket;
public SessionWindow(Project mProject, Disposable parent, ClientSocket socket) {
super();
this.mProject = mProject;
this.parent = parent;
this.socket = socket;
mFrame = new JFrame();
mFrame.setSize(new Dimension(1024, 500));
mFrame.setResizable(true);
mFrame.setTitle("Debug window");
mFrame.setLayout(new BorderLayout());
mFrame.add(container, BorderLayout.CENTER);
mFrame.pack();
mFrame.setVisible(true);
jSplitPane.setResizeWeight(.4f);
populateDatabase();
tableTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tableTree.addTreeSelectionListener(e -> {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
tableTree.getLastSelectedPathComponent();
/* if nothing is selected */
if (node == null) return;
IBaseModel model = (IBaseModel) node.getUserObject();
if (model instanceof DTable) {
showTablePane();
DTable table = (DTable) model;
populateTable(table);
} else if (model instanceof DDatabase) {
showEditorPane();
}
});
}
private void populateDatabase() {
socket.requestDbDetails();
DataObserver.getInstance().subscribe(listener);
}
private void showTablePane() {
jSplitPane.setRightComponent(null);
jSplitPane.setRightComponent(jScrollTree);
jSplitPane.invalidate();
}
private void showEditorPane() {
editorPanel = new JPanel();
editorPanel.add(createEditor().getComponent(), BorderLayout.CENTER);
jSplitPane.setRightComponent(null);
jSplitPane.setRightComponent(editorPanel);
jSplitPane.invalidate();
}
private Editor createEditor() {
//create an return editor
return editor;
}
}
Проблема в том, что когда я заменяю таблицу на editor
, editor
становится правильным компонентом (не полностью видимым, но мы можем видеть его там)
Но при попытке заменить editor
на table
ничего не происходит.