基于javaGUI的字符查找小程序
前言
对于javaGUI我也是最近了解的,我发现编译结果不在局限于console,就感觉挺新奇的,然后刚好老师也布置了一个作业,我也就想着用javaGUI来实现一下,然后就做了一个这个东西。结果如下图(懒得搞动图了):
代码实现
Main类
对于这个类而言的话,主要就是添加一些图形界面,其他似乎也没啥了。然后我说一说比较然我头疼的一个东西,就是添加事件处理,一开始着实让我有一点茫然。譬如说:就是我不知道我应该怎样将图形界面的输入文本进行处理,后来发现有一个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());
}
大致就是这样了,读者可以按照自己的想法实现不一样的功能。
Find类
对于这类其实没什么说的,因为就是一个简单的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或者是自己写一些简单的方法,还是比较容易的。简而言之就是将界面,逻辑,数据分开来实现,懂了这个就比较简单了。