ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java_GUI-字符查找及替换

2021-11-26 21:34:09  阅读:173  来源: 互联网

标签:事件处理 cnt 这个 Java int GUI next 实现 查找


基于javaGUI的字符查找小程序

源码以及jar文件

前言

对于javaGUI我也是最近了解的,我发现编译结果不在局限于console,就感觉挺新奇的,然后刚好老师也布置了一个作业,我也就想着用javaGUI来实现一下,然后就做了一个这个东西。结果如下图(懒得搞动图了):

gridea/javaGUI.png · zmc-x/图库 - 码云 - 开源中国 (gitee.com)

代码实现

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或者是自己写一些简单的方法,还是比较容易的。简而言之就是将界面,逻辑,数据分开来实现,懂了这个就比较简单了。

标签:事件处理,cnt,这个,Java,int,GUI,next,实现,查找
来源: https://blog.csdn.net/weixin_52185973/article/details/121569016

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有