Как динамически менять компоненты в JSplitPane - PullRequest
0 голосов
/ 09 мая 2018

Я создаю поворотную раму, которая динамически меняется. Вот текущее расположение (я работаю в IntelliJ IDEA) current format

Как вы можете видеть, есть главный 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 ничего не происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...