当前位置: 首页 > 科技观察

学习开发看书的侧边栏形式

时间:2023-03-20 15:16:43 科技观察

< titlesplit >1.说明方向不对,努力白费!总有人拿到产品的需求,就抢着干活。反正他们也懒得去想开发会发生什么,所以上线多少人用了之后,就把代码堆起来看看。反正代码还是你也没关系!其实写代码前很多时候需要做的技术调研、架构设计、模块分析、数据结构、详细分析、程序评审等等,跟3721那家伙比起来好像慢了点.但这个看似缓慢的过程却可以解决很多日后常见且麻烦的问题,比如产品需求迭代、业务流程变更、代码逻辑变更、线上异常排查等。虽然看起来很慢,但是打地基的过程就像打地基一样。必须有一个稳固的地基,才能建造整座大楼。如果要开发一个自定义功能的插件,无论是处理代码,辅助ORM生成,日志信息记录等,都需要配置一个插件的功能,进行初始化操作,显示相应的功能到整个IDEA窗体的右侧边栏或者下方侧边栏,满足一个插件的基本需求。然后需要在IDEA窗体File->Settings中展开自己的配置窗体,开发自己需要嵌入到IDEA中的ToolWindow(左侧,右侧,底部)。这里的窗体开发需要用到Swing,但是目前在IDEA中只需要拖拽窗体就可以很容易的开发出这样的功能。那我们就以IDEA中一个钓鱼和阅读的场景为例,学习一下配置表单和阅读表单的功能实现。三、案例开发1、项目结构guide-idea-plugin-tool-window├──.gradle└──src├──main│└──java│└──cn.bugstack.guide.idea.plugin│└──factory││├──ReadFactory.java││└──SettingFactory.java│└──ui││├──ReadUI.java││├──ReadUI.form│├├──SettingUI.java││└──SettingUI.form│└──Config├──resources│└──META-INF│└──plugin.xml├──build.gradle└──gradle.properties本项目主要涉及两部分,在factory一个是配置表单,一个是读取表单,实现了对应的两套UI。最后会在plugin.xml中配置工厂类的实现以供使用,窗体的位置和图标也在plugin.xml中控制。2.创建UI窗体2.1创建方法New->SwingUIDesigner->GUIFormJava中创建窗体的方式主要有AWT、Swing、JavaFx。由于IDEA是使用Swing开发的,所以这里创建的Swing窗体的兼容性会更好。所以这里的Swing窗体的创建可以是手写的窗体结构,也可以使用可视化的拖拽式GUIForm。如果你的表单不复杂,其实可以使用拖拽的方式。2.2配置页面窗体publicclassSettingUI{privateJPanelmainPanel;privateJPanelsettingPanel;privateJLabelurlLabel;privateJTextFieldurlTextField;privateJButtonurlBtn;publicSettingUI(){//给按钮添加文件选择事件urlBtn.addModooActionListener(e->{FileChooserfileChooser=newJFileSchooser.file_ONLY);FILESooser.showOpenDialog(settingPanel);Filefile=fileChooser.getSelectedFile();urlTextField.setText(file.getPath());});}publicJComponentgetComponent(){returnmainPanel;}publicJTextFieldgetUrlTextField(){returnurlTextField;}}配置页面表单主要提供文章路径的选择。这里需要用到的标签包括:JLabel、JTextField、JButton。在中间面板中,设置左侧的显示名称和属性名称。最后,这里的代码标签代码会显示在SettingUI.java中,渲染的内容会被隐藏。这种方法也比较方便控制一些自定义内容的添加,比如事件、新表单等。另外,在SettingUI.java中,还有我们需要在构造函数中添加一个打开文件选择器的按钮事件,将我们需要打开的文件设置为urlTextField。2.3阅读页面表单publicclassReadUI{privateJPanelmainPanel;privateJTextPanetextContent;publicJComponentgetComponent(){returnmainPanel;}publicJTextPanegetTextContent(){returntextContent;}}与表单创建和配置页面表单一样,也是拖入显示路径文件的面板内容。可以适当添加一些其他的按钮,比如翻页、滚动条、字数显示等。3.ToolWindow工具箱为了将我们自己实现的阅读表单放到IDEA的右侧边栏中,我们需要创建一个界面,implementsToolWindowFactory,并在plugin.xml中配置实现类publicclassReadFactoryimplementsToolWindowFactory{privateReadUIreadUI=newReadUI();@OverridepublicvoidcreateToolWindowContent(@NotNullProjectproject,@NotNullToolWindowtoolWindow){//获取内容工厂的实例ContentFactorycontentFactory=ContentFactory.SERVICE.getInstance();//获取ToolWindow显示的内容Contentcontent=contentFactory.createContent(UI.getonent(UI.getInstance)",false);//设置ToolWindow显示的内容toolWindow.getContentManager().addContent(content);//全局使用Config.readUI=readUI;}}接口方法ToolWindowFactory#createToolWindowContent是需要自己工具箱类实现的方法,我在这个createToolWindowContent方法中,实例化您自己的表单ReadUI并填写它。添加表单的补贴主要是靠ContentFactory.SERVICE.getInstance()创建一个ContentFactory,最后使用toolWindow添加表单来显示UI。这里我们额外添加了一个全局属性Config.readUI,用于稍后在配置表单中使用这个UI来设置文件内容。4.可配置配置publicclassSettingFactoryimplementsSearchableConfigurable{privateSettingUIsettingUI=newSettingUI();@Overridepublic@NotNullStringgetId(){return"test.id";}@Overridepublic@Nls(capitalization=Nls.Capitalization.Title)StringgetDisplayName(){return"test-config";}@Overridepublic@NullableJComponentcreateComponent(){returnsettingUI.getComponent();}@OverridepublicbooleanisModified(){returntrue;}@Overridepublicvoidapply()throwsConfigurationException{Stringurl=settingUI.getUrlTextField().getText();//设置文本信息try{Filefile=newFile(url);RandomAccessFilerandomAccessFile=newRandomAccessFile(file,"r");randomAccessFile.seek(0);byte[]bytes=newbyte[1024*1024];intreadSize=randomAccessFile.read(bytes);byte[]copy=newbyte[readSize];System.arraycopy(bytes,0,copy,0,readSize);Stringstr=newString(copy,StandardCharsets.UTF_8);//设置内容Config.readUI.getTextContent().setText(str);}catch(Exceptionignore){}}}实现自SearchableConfigurable接口的方法有很多,包括:getId、getDisplayName、createComponent、isModified、apply,主要用于编写逻辑实现是createComponent和apply。createComponent方法主要是将我们自己创建的UI面板提供给JComponent。申请是一个事件。当我们点击确定完成配置完成后,这个方法就会被触发在该方法中,我们获取文件的URL地址,并使用RandomAccessFile读取并解析文件,最后以阅读形式显示文件内容。Config.readUI.getTextContent().setText(str);5、配置plugin.xmlplugin.xml中的主要配置内容这个时候是projectConfigurable和toolWindow,另外在toolWindow中添加了一个图标标识。配置完成后,我们添加的表单就可以显示在IDEA页面上了。4、插件测试通过Plugin启动插件,此时会打开一个新的IDEA窗口,在窗口中可以看到我们添加的功能。配置文件路径点击选择按钮选择你的文件位置,选择后点击确定查看显示文件确认文件路径后,你可以在右侧栏看到你自己的文件显示内容。是不是膨胀了,适合你钓鱼!?5.总结学习自定义开发UI,将UI填充到IDEA窗体需要放置的位置,给窗体添加功能的过程步骤。其实主要包括三个方面:SwingUI、Factory实现类、插件配置。在插件配置中,主要包括表单ID,位置,icon图标,以及对应的实现类。如果不添加这些,则无法正常显示表单信息。另外,在这个案例的基础上,你可以添加你想要完成的功能,比如让摸鱼看书的功能更加完善,支持不同类型的文件,甚至PDF阅读,还有你想看的书。