JComponent () { JBTabbedPane tabbedPane = new JBTabbedPane(); myFileTypePanel = new FileTypePanel(); myRecognizedFileType = new RecognizedFileTypesPanel(); JBSplitter splitter = new JBSplitter(false, 0.3f); splitter.setFirstComponent(myRecognizedFileType); JPanel rightPanel = new JPanel(new BorderLayout()); myPatterns = new PatternsPanel(); myHashBangs = new HashBangPanel(); rightPanel.add(myPatterns, BorderLayout.CENTER); rightPanel.add(myHashBangs, BorderLayout.SOUTH); splitter.setSecondComponent(rightPanel); myFileTypePanel.myUpperPanel.add(splitter, BorderLayout.CENTER); myRecognizedFileType.myFileTypesList.addListSelectionListener(__ -> updateExtensionList()); myFileTypePanel.myAssociatePanel.setVisible(OSAssociateFileTypesUtil.isAvailable()); myFileTypePanel.myAssociatePanel.setBorder(JBUI.Borders.emptyTop(16)); myFileTypePanel.myAssociateButton.setText( FileTypesBundle.message("filetype.associate.button", ApplicationNamesInfo.getInstance().getFullProductName())); myFileTypePanel.myAssociateButton.addActionListener(__ -> OSAssociateFileTypesUtil.chooseAndAssociate( new OSAssociateFileTypesUtil.Callback() { @Override public void beforeStart() { ApplicationManager.getApplication().invokeLater(()-> { myFileTypePanel.myAssociateButton.setEnabled(false); updateAssociateMessageLabel( FileTypesBundle.message("filetype.associate.message.updating"), null); }, ModalityState.any()); } @Override public void onSuccess(boolean isOsRestartRequired) { ApplicationManager.getApplication().invokeLater(()-> { myFileTypePanel.myAssociateButton.setEnabled(true); if (isOsRestartRequired) { updateAssociateMessageLabel( FileTypesBundle.message("filetype.associate.message.os.restart"), AllIcons.General.Warning); } else { updateAssociateMessageLabel("", null); } showAssociationBalloon( FileTypesBundle.message("filetype.associate.success.message", ApplicationInfo.getInstance().getFullApplicationName()), HintUtil.getInformationColor()); }, ModalityState.any()); } @Override public void onFailure(@NotNull @Nls String errorMessage) { ApplicationManager.getApplication().invokeLater(()-> { myFileTypePanel.myAssociateButton.setEnabled(true); updateAssociateMessageLabel("", null); showAssociationBalloon(errorMessage, HintUtil.getErrorColor()); }, ModalityState.any()); } } )); tabbedPane.add(FileTypesBundle.message("filetype.recognized.group"), myFileTypePanel.myWholePanel); myIgnoreFilesPanel = new IgnoredFilesAndFoldersPanel(); tabbedPane.add(FileTypesBundle.message("filetype.ignore.group"), myIgnoreFilesPanel); return tabbedPane; }