源码以及jar文件
对于javaGUI我也是最近了解的,我发现编译结果不在局限于console,就感觉挺新奇的,然后刚好老师也布置了一个作业,我也就想着用javaGUI来实现一下,然后就做了一个这个东西。结果如下图(懒得搞动图了):
对于这个类而言的话,主要就是添加一些图形界面,其他似乎也没啥了。然后我说一说比较然我头疼的一个东西,就是添加事件处理,一开始着实让我有一点茫然。譬如说:就是我不知道我应该怎样将图形界面的输入文本进行处理,后来发现有一个api可以调用,就是JTextField这个类中的一个方法getText就可以将文本读到一个字符串中去,当然那个setText就可以将事件处理之后的文本输出到图形界面上去。但我了解到这个东西之后后面的一些东西就很好实现了。
下面我简要说一下我的代码思路
首先是图形界面的布局,先简要的构思一下界面的样子,然后按照思路去实现。对于我的布局,我采取的是BorderLayout的布局,然后在上面是布置的两个JLabel类的标签用来表示前后的字符串出现的位置,然后再创建了jTextField类的两个文本组件来文本输入,当然创建了这些,你需要用一个JPanel类的组件来包裹这些组件,然后把这个放到JFrame这个顶级的窗口中去,而这个操作也比较简单,将创建好jpannel的组件直接通过jframe的一个方法直接添加到那个顶级窗口中去,然后这样就可以了。至于相关组件的大小就得看自己的想法了。然后至于其他BorderLayout的部分,和这个差不多,我就不过多的进行赘述了。
下面就是添加事件处理事件处理的方法了,这个理解之后其实比较好写,首先通过按键的addActionListener方法进行事件处理的调用,而你调用的相关的方法是需要你自己进行实现而后封装最后通过addActionLIstener的方法进行调用,而对于相关的方法就看你自己要实现什么功能了,这个主要看个人的想法。这里我举一个我程序中find事件处理的调度以及实现。
find.addActionListener(actionEvent->findPerformed(actionEvent));
private static void findPerformed(ActionEvent actionEvent) { String str=n_text.getText(); String finch=findtext.getText(); int len=str.length(); number.setText(Integer.toString(len));//调用api将int转化为string Find FIND=new Find(str, finch); FIND.kmp(str, finch); if(FIND.flag==1) afterfindText.setText("没有你要查找的字符串诶。"); else{ int len_=FIND.me_cnt; StringBuffer mid=new StringBuffer();//定义一个中间的字符串 int cnt=0;//用来判断是加入'-'还是' ' for(int i=0;i<len_;i++){ cnt++; mid.append(FIND.memory[i]); if(cnt%2!=0)mid.append('-'); else mid.append(' '); } afterfindText.setText(mid.toString()); }
大致就是这样了,读者可以按照自己的想法实现不一样的功能。
对于这类其实没什么说的,因为就是一个简单的kmp算法来实现字符串的查找操作,这个算法不是本文的重点我就不过多的介绍了,这个算法在数据结构中会有介绍的,要是还没学数据结构的读者可以去网上去了解一下这个算法。相关的连接我就不推荐了,网上很多。这个算法主要就是**字串next[]**的实现,其他的就没什么了,在这里我就给出我的next数组的算法
int []next=new int[100]; next[0]=-1;//一号位置失配 next[1]=0;//2号位置失配 int i,j,k; i=j=0; k=1; int cnt=1;//判断循环次数 me_cnt=0; for(i=2;i<len1;i++) { while(k<len1&&j<len1) { if(minor[j]!=minor[k]) { cnt++;//叠加 k=cnt; j=0; } else { k++; j++; } } next[i]=j; }
当然这个next数组还是可以优化的,我这里就没去实现了,读者可以自行去实现。当写了这个Find类之后就可以在Main类中进行相关的调用来实现你所需要实现的其他功能了。
博主这里只写两个类,没在添加其他的类了,读者当然也可以自行进行添加相关的类来实现更多的一些操作。
对于这个java中的GUI呢,我个人感觉还是比较简单的(或许是我学的比较浅,还不够深入),主要就是调用一些组件的相关的api或者是自己写一些简单的方法,还是比较容易的。简而言之就是将界面,逻辑,数据分开来实现,懂了这个就比较简单了。
的比较浅,还不够深入),主要就是调用一些组件的相关的api或者是自己写一些简单的方法,还是比较容易的。简而言之就是将界面,逻辑,数据分开来实现,懂了这个就比较简单了。