private void createUIComponents()

in PluginsAndFeatures/azure-toolkit-for-intellij/src/main/java/com/microsoft/azure/toolkit/intellij/docker/ContainerRegistryPropertyView.java [170:305]


    private void createUIComponents() {
        DefaultTableModel repoModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        repoModel.addColumn(REPOSITORY);

        tblRepo = new JBTable(repoModel);
        tblRepo.getEmptyText().setText(TABLE_LOADING_MESSAGE);
        tblRepo.setRowSelectionAllowed(true);
        tblRepo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tblRepo.setStriped(true);
        tblRepo.getSelectionModel().addListSelectionListener(event -> {
            if (event.getValueIsAdjusting()) {
                return;
            }
            int selectedRow = tblRepo.getSelectedRow();
            if (selectedRow < 0 || selectedRow >= tblRepo.getRowCount()) {
                return;
            }
            String selectedRepo = (String) tblRepo.getModel().getValueAt(selectedRow, 0);
            if (Utils.isEmptyString(selectedRepo) || Comparing.equal(selectedRepo, currentRepo)) {
                return;
            }
            currentRepo = selectedRepo;
            disableWidgets(false, true);
            tblTag.getEmptyText().setText(TABLE_LOADING_MESSAGE);
            containerPropertyPresenter.onListTags(subscriptionId, registryId, currentRepo, true /*isNextPage*/);
        });

        btnRepoRefresh = new AnActionButton(REFRESH, AllIcons.Actions.Refresh) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                disableWidgets(true, true);
                tblTag.getEmptyText().setText(TABLE_EMPTY_MESSAGE);
                containerPropertyPresenter.onRefreshRepositories(subscriptionId, registryId, true /*isNextPage*/);
            }
        };

        btnRepoPrevious = new AnActionButton(PREVIOUS_PAGE, AllIcons.Actions.MoveUp) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                disableWidgets(true, true);
                tblTag.getEmptyText().setText(TABLE_EMPTY_MESSAGE);
                containerPropertyPresenter.onListRepositories(subscriptionId, registryId, false /*isNextPage*/);
            }
        };

        btnRepoNext = new AnActionButton(NEXT_PAGE, AllIcons.Actions.MoveDown) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                disableWidgets(true, true);
                tblTag.getEmptyText().setText(TABLE_EMPTY_MESSAGE);
                containerPropertyPresenter.onListRepositories(subscriptionId, registryId, true /*isNextPage*/);
            }
        };

        ToolbarDecorator repoDecorator = ToolbarDecorator.createDecorator(tblRepo)
                .addExtraActions(btnRepoRefresh)
                .addExtraAction(btnRepoPrevious)
                .addExtraAction(btnRepoNext)
                .setToolbarPosition(ActionToolbarPosition.BOTTOM)
                .setToolbarBorder(JBUI.Borders.empty());

        pnlRepoTable = repoDecorator.createPanel();

        DefaultTableModel tagModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        tagModel.addColumn(TAG);

        tblTag = new JBTable(tagModel);
        tblTag.getEmptyText().setText(TABLE_EMPTY_MESSAGE);
        tblTag.setRowSelectionAllowed(true);
        tblTag.setStriped(true);
        tblTag.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tblTag.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    int rowIndex = tblTag.getSelectedRow();
                    if (rowIndex < 0 || rowIndex >= tblTag.getRowCount()) {
                        return;
                    }
                    currentTag = (String) tblTag.getModel().getValueAt(rowIndex, 0);
                    menu.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });
        btnTagRefresh = new AnActionButton(REFRESH, AllIcons.Actions.Refresh) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                if (Utils.isEmptyString(currentRepo)) {
                    return;
                }
                disableWidgets(false, true);
                containerPropertyPresenter.onListTags(subscriptionId, registryId, currentRepo, true /*isNextPage*/);
            }
        };

        btnTagPrevious = new AnActionButton(PREVIOUS_PAGE, AllIcons.Actions.MoveUp) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                if (Utils.isEmptyString(currentRepo)) {
                    return;
                }
                disableWidgets(false, true);
                containerPropertyPresenter.onListTags(subscriptionId, registryId, currentRepo, false /*isNextPage*/);
            }
        };

        btnTagNext = new AnActionButton(NEXT_PAGE, AllIcons.Actions.MoveDown) {
            @Override
            public void actionPerformed(AnActionEvent anActionEvent) {
                if (Utils.isEmptyString(currentRepo)) {
                    return;
                }
                disableWidgets(false, true);
                containerPropertyPresenter.onListTags(subscriptionId, registryId, currentRepo, true /*isNextPage*/);
            }
        };

        ToolbarDecorator tagDecorator = ToolbarDecorator.createDecorator(tblTag)
                .addExtraActions(btnTagRefresh)
                .addExtraAction(btnTagPrevious)
                .addExtraAction(btnTagNext)
                .setToolbarPosition(ActionToolbarPosition.BOTTOM)
                .setToolbarBorder(JBUI.Borders.empty());

        pnlTagTable = tagDecorator.createPanel();
    }