Java_GUI-字符查找及替换

1 篇文章 0 订阅

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmc曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值