简单Swing程序示例

  简单的Swing程序示例,输入一段英文,识别其中的冠词(a an the),主要用于熟悉Eclipse及Swing的使用方法。

创建项目

  在Eclipse中创建一个名为IdentifyArticle的项目

  在项目下创建com.gc.IdentyfyArticle的包。
在这里插入图片描述
  在包下创建程序主窗口frmIdentifyArticle。
在这里插入图片描述
  然后在主窗口中布置控件。Eclipse和VS不同的地方在于,JFrame窗口不能直接放控件,窗口必须有个面板(ContentPane),然后在面板上放置控件,面板的默认布局用的是BoxLayout布局方式(将窗口划分为上、下、左、右、中五个区域)。如果使用过VS的Winform程序的话,在Winform中是不分这么细,直接可以在VS的工具箱中拖动控件到窗口中,而且布局控件不是必须的,需要特殊布局时才会使用布局控件,模式是可以将控件随意放置在窗口中(可以认为等同于Swing中的Absolute Layout)。
  先将frmIdentifyArticle中的布局方式改为绝对布局,选中工具条中的Absolute Layout,然后点击窗口的任意空白位置,WindowBuilder会自动切换窗口布局方式。然后开始布置控件,本例子中使用的控件比较简单,用户主要操作是输入一段英文,然后点击识别按钮,程序将识别英文字符串中出现了哪些冠词。因此需要的控件有标签、文本框、按钮。
  最简单的冠词识别方法是将英文字符串slipt后,比较每个单词是否为a、an和the中的一个。不过通过学习网上的文章(参考文献1-2),文章中还介绍了其它识别方法,因此在frmIdentifyArticle中增加一个下拉框,用户点击识别按钮前,可以选择不同的识别方法。
  综上所述,本项目的窗口大致如下所示:
在这里插入图片描述
  有几点值得说明:

  • Eclipse中的文本框分单行和多行(JTextField和JTextArea控件),而VS里面的Textbox是不分的(用属性设置单行和多行);
  • WindowBuilder中添加控件后控件默认为局部变量(暂不清楚Eclipse中是否有地方设置),可以手动将控件声明改为私有变量,也可以使用属性窗口中的“Convert local to field”在局部变量和私有变量间切换。而在VS中,控件声明默认就是私有变量;
  • 点击JComboBox控件,在属性窗口中的model属性中编辑下拉框选项。
  • JTextField的lineWrap要设为true,否则不会自动换行。
关键代码

  因为有多种冠词识别方法,因此定义接口IIdentifyArticle用于抽象识别方法。接口定义为:

public interface IIdentifyArticle 
{
	String[] IdentifyArticle(String englishSentence);
}

  创建了SplitEnglishSentence 类实现split方法识别冠词。

public class SplitEnglishSentence implements IIdentifyArticle
{
	public String[] IdentifyArticle(String englishSentence)
	{
		if(englishSentence.isEmpty())
		{
			return new String[0];
		}
		
		ArrayList<String> result=new ArrayList<String>();
		String[] splitedResult=englishSentence.split(" ");
		for(String s :splitedResult)
		{
			if(s.equalsIgnoreCase("a"))
			{
				result.add("a");
			}
			else if(s.equalsIgnoreCase("an"))
			{
				result.add("an");
			}
			else if(s.equalsIgnoreCase("the"))
			{
				result.add("the");
			}				
		}
		
		return result.size()>0?result.toArray(new String[0]):new String[0];				
	}
}

  创建了StringTokenizerEnglishSentence 类实现StringTokenizer 类识别冠词。

public class StringTokenizerEnglishSentence implements IIdentifyArticle
{
	public String[] IdentifyArticle(String englishSentence)
	{
		if(englishSentence.isEmpty())
		{
			return new String[0];
		}
		
		List<String> result=new ArrayList<String>();

		StringTokenizer st = new StringTokenizer(englishSentence," ,?.!:\"\"''\n#");
		
		while (st.hasMoreElements())
		{
		    String s=st.nextToken().toLowerCase();
		    
		    if(s.equalsIgnoreCase("a"))
			{
				result.add("a");
			}
			else if(s.equalsIgnoreCase("an"))
			{
				result.add("an");
			}
			else if(s.equalsIgnoreCase("the"))
			{
				result.add("the");
			}			
		}		
		
		return result.size()>0?result.toArray(new String[0]):new String[0];				
	}
}

  全部代码放在了github上面,地址为:https://github.com/guochao2299/SimpleSwingTest ,程序最终运行界面如下(代码没有检查重复结果,懒得改了:-))

在这里插入图片描述

参考文献:
[1]Java将英文句子分解为单词,https://blog.csdn.net/qq_37514135/article/details/79512768
[2]java英文段落拆分成句,https://blog.csdn.net/houninghhh/article/details/80116922

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值