JFrame翻译词典
以JFrame GUI的形式制作可视化词典程序,采用JFormDesigner进行。
JFormDesigner实际上就是代码生成器,在它的页面进行可视化布局,属性设置后,它会自动生成对应的属性和布局代码,覆盖掉上一次的代码。
(在它的界面进行操作的话就会刷新掉你之前手动写在initComponents()内的代码)
1.安装步骤
请具体参考大佬的帖子,有一些细节先看我下面的文字,再按照帖子里写的步骤来,如果图片看不到,主要看步骤(你要是有能看markdown格式的软件,可以下载下来,那是能看到的)
点这里
一些小细节:
(1).在idea里下载JFormDesigner是这个,注意不要下成paid版
(2).如果你的C:\Users\(你自己电脑的用户名或者品牌名)\AppData\下没有Roaming文件夹,可能是被隐藏了,寻找自己系统的查看设置显示隐藏的文件。虚拟机的exe要放在plugins\JFormDesigner\lib文件夹下,并且patch前记得关闭idea!
(3).项目位置:选中在你自己的项目里的java目录(蓝色文件夹)(最好是上次做接口的那个项目,如果新建了项目,请把之前做过的项目的内容复制到这个项目里),点文件-新建-New JFormDesigner Form,在弹出的界面里按照我这里的设置更快也符合要求
选择-JFrame-none-null layout 4、5均不选中点击ok,然后关闭idea,进行注册机的步骤
(4).注册机界面选择产品选第三个,即idea。点patch的时候如果你放在正确的lib目录下会出现一个jar包让你选择,选中打开再点generator就行。
(5).generator完之后得到txt,这个时候打开idea打开刚刚你已经创建过的后缀为jfd的文件,里面会有一个Register按钮,点进去,选择有一个窗口,选择你刚刚生成的那个txt文件,就可以了。
2. 页面操作
如果你完成了第一步里的所有内容,那当你打开jfd文件时应该是能够看到这样的画面
挺类似于vb和c#的窗口,左侧单击选择组件,在窗口上单击放置。
这是我们的目标样式
基本上能看到三个文本框,三个文本标签和两个按钮,文本框可以是textfield也可以是textarea,比较推荐一个textfield和两个textarea,三个label和两个按钮。
(另外不得不吐槽JFD里面不能用undo撤回操作。。。或者可能有,我没找到。。。)
右侧可以修改组件的属性
x,y设置坐标,text设置文本,主要用到就是这些。
如果你想,也可以把下面两个输入的editable属性改成false,因为它们不具备输入功能,将其设置为只读。
然后,设置完样式,我们到你创建的这个.jfd文件同名的类中添加main函数
然后你就能启动这个类了,点击启动
如果对页面不满意可以自己调整值.
3.添加按钮事件
确保现在这个项目里有之前写的接口文件及百度版和内存版接口实现类还有之前的utils工具类以及pom.xml里gson相关的依赖
当你制作完界面后,右键按钮Add event handler 选择第一个ActionListener
在弹出的窗口中,Handler method是用来给你改方法名的,可改可不改。
这里我设置名字叫translator,他就会在类文件内生成一个translator方法
并把这个方法绑定给button1,你将在这个方法下写自己的内容。
这条就是绑定的代码,都是他帮你生成的。
translator函数内主要实现的逻辑是接受第一个输入框输入的单词,拿这个单词去调用内存版和百度版,并将结果分别输出到你的两个输出用的框上。
由于原本的实现类可能存在报错异常,这里我们在方法里打上try catch捕获输出,具体你的组件名字可能和我的不一样,接口实现类可能也不一样,改成你自己的才能正常使用,至于文本框里的返回值,在我的项目里上一个项目的逻辑是找不到单词返回自己,这里我去自己的实现类里修改了返回值
private void translator(ActionEvent e) {
// TODO add your code here
MemoryDictionary memoryDictionary = new MemoryDictionary();
BaiduDictionary baiduDictionary = new BaiduDictionary();
String word = textField1.getText();
try{
textArea1.setText(memoryDictionary.getTranslation(word));
}catch (Exception ex)
{
textArea1.setText("字典文件丢失或出错!");
}
textArea2.setText(baiduDictionary.getTranslation(word));
}
内存版
百度版
重置按钮:
将三个文本框的值设为空即可
private void reset(ActionEvent e) {
textField1.setText("");
textArea1.setText("");
textArea2.setText("");
}
4. 运行程序
基本上的大致功能是好了,一些小细节还能再做的更精细一点。