第三次作业,GUI设计之最大子序列和
2013-10-21 16:31
239 查看
先吐槽一发!!!学渣表示作业太难了啊!!!!!!做一次作业要用好久好久,要问好多好多大神才能行,虽然确实提高不少,花的时间真是……!!!!!
这次作业费劲心血,希望老师能给个好分数,至少对于学渣来说已经很不容易了。
还要感谢我的室友杨超同学(11061098),可以说这个小软件是我和他一起写的,他懂得java语言,我负责写框架,他负责写功能,然后我再把代码集合起来生成小软件。这是我们结对编程的结晶~~~
[b][b]回到正题,看到第三次的题目,结合课堂有同学提出的建议,用浏览器实现单个程序多个标签的目标非常靠谱,于是学着写Java的Applet了。[/b][/b]
[b][b]先上代码[/b][/b]
以上就是源代码了,等下慢慢来解读我的程序是怎么写的
再附上嵌入网页的源码
这个网页代码很简单
applet是网页中嵌入的小程序,宽和高为320
这个是小程序的截图
使用方法:在x长度和y长度里面输入两个数字,分别是要输入数组的两个维度,x为横向长度,y为纵向长度
在输入完x和y以后在下面的文本框中输入测试数据,比如
在输入完毕以后点击“开始”开始运算,弹出窗口并显示结果
这就是最终答案:12
介绍一下这个小程序是怎么写的:
先说说界面部分
import几个需要用到的方法,创建了一个名为开始的button和x,y轴长度的标签和输入文本框
然后注册了一个jpl的框体,将button,两个标签以及两个文本框放到这个jpl框体中
然后通过数组创建了一个6*6的JTextfield文本框,这个创建花了我很久的时间
刚开始想一个个的手打一个个的创建,后来实在觉得一定可以用for循环来创建
但是百度和书本都没有关于批量创建和引用的内容,于是自己慢慢摸索,写出了这两部分代码发现可以执行并且能够知道文本框的名字
上面是声明文本框数组变量
下面的部分是创建一个名为arr的框体,设置arr框体的布局为GRIDLAYOUT
通过两个for循环为每个JTEXTFIELD附上名字并且添加到arr的框体当中
然后通过
这个语句将arr框体添加到总框体frame当中。
然后完成的效果就是
上面的第一排是Jpl框体,下面的GRID是arr框体,他们共同被放在frame里面
写完这段界面整整花掉了6个小时啊!!!(学渣你伤不起,从0开始啊!写这个程序之前JAVA怎么写我都不知道。。不说了,都是泪)
介绍完框架,开始绑定函数和添加监听了(监听是什么神奇的东西,我什么都不知道啊!)
学习事件和监听的基础,用时3小时~
这算是个基本格式了
利用的是点击按钮触发事件的方式
在下面的actionperformed里面写要执行的动作就行了
先测试了一发点击按钮生成对话框的功能
发现屏幕上真的出现了一个消息窗口对我说“shit!”
这真是个好消息
后面的工作可以慢慢来了
找到第二次作业的代码,经过长时间的改动和测试改成了在java中能使用的代码,由杨超同学主力完成,我来辅助
然后在调用函数的过程中发现了一个严重的问题!!
Jtextfield的内容为String,要处理的数组要int,怎么转换啊?
尝试了半天,发现要利用一个叫做
Integer.parseInt()的函数
问题又能解决了
利用Integer.parseInt()和gettext()
我顺利的从文本框中得到了我需要的文字,并且是整形的哦~
问我如何知道?我把
JOptionPane.showMessageDialog( this ,“shit”)改成了JOptionPane.showMessageDialog( this ,b[0][0]+b[0][1]);
如果没有转换成int,还是string的话我在b00和b01的位置分别输入1和2,那么信息盒子给出的结果一定是12(string的加号是连接)
如果转化成了整形,那么信息盒子给出的一定是3(int的加号是数学加)。机智!!!!!
又花了一个小时把这个程序搞定
开始测试
把生成的.class拷贝到网页的applet文件夹下面,打开网页,当当当当!!!!!成功了
真是不容易
当然还有未完成的一些功能,比如在显示结果的同时将最大和的矩形通过颜色标记出来。这个可以实现,但是对于我来说需要不少的时间,先交个基础版的吧。
题外话
结对编程让我学到了很多,也让我找到了乐趣,在和同学讨论一个程序如何实现的过程中,我能够听到别人的想法,并用别人的想法来优化我的思路,这样的设计软件的方法真是不错
这次作业做了很久,是今天早晨在完成的全部的工作,下午把博客写完,博客也写了不少时间,貌似超过了规定的交作业时间一点点,希望老师能够通融
我真的有在很努力的写程序,实在因为水平有限,而且时间不是很多,以后还要多靠大神,谁让我自己是个“坑”~~~
这次作业费劲心血,希望老师能给个好分数,至少对于学渣来说已经很不容易了。
还要感谢我的室友杨超同学(11061098),可以说这个小软件是我和他一起写的,他懂得java语言,我负责写框架,他负责写功能,然后我再把代码集合起来生成小软件。这是我们结对编程的结晶~~~
[b][b]回到正题,看到第三次的题目,结合课堂有同学提出的建议,用浏览器实现单个程序多个标签的目标非常靠谱,于是学着写Java的Applet了。[/b][/b]
[b][b]先上代码[/b][/b]
import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class frame extends JApplet implements ActionListener{ private FlowLayout fl=new FlowLayout(FlowLayout.CENTER); private JButton bt=new JButton("开始"); private JLabel lbx=new JLabel("x长度"); private JLabel lby=new JLabel("y长度"); private JTextField tfx=new JTextField(2); private JTextField tfy=new JTextField(2); private JPanel jpl=new JPanel(); private JPanel arr=new JPanel(); private JTextField[][] a=new JTextField[6][6]; public frame() { jpl.add(bt); jpl.add(lbx); jpl.add(tfx); jpl.add(lby); jpl.add(tfy); arr.setLayout(new GridLayout(6,6)); for(int i=0;i<6;i++) for(int j=0;j<6;j++) { a[i][j]=new JTextField(2); arr.add(a[i][j]); } jpl.setSize(200,200); bt.addActionListener(this); this.add(jpl); this.add(arr); this.setLayout(fl); this.setSize(250,250); this.setVisible(true); } public void actionPerformed(ActionEvent e){ int x=Integer.parseInt(tfx.getText()); int y=Integer.parseInt(tfy.getText()); int b[][]=new int[6][6]; for(int i=0;i<y;i++) { for(int j=0;j<x;j++) { b[i][j]=Integer.parseInt(a[i][j].getText()); } } int l= find(x,y,b); JOptionPane.showMessageDialog( this ,l); } public void init() { new frame(); } public int find(int x,int y,int b[][]){ int s,sum,n; int max; int c[][]=new int[100][100]; for(int i=0;i<x;i++) { n=0; for(int j=0;j<y;j++) { sum=0; for(int t=j;t>=0;t--) { sum=sum+b[t][i]; c [i]=sum; n++; } } } max=c[0][0]; for(int i=0;i<(y*(y+1)/2);i++) { s=c[i][0]; for(int j=1;j<x;j++){ s+=c[i][j]; if(s<c[i][j])s=c[i][j]; if (max<s) max=s; } } return max; /* */ } }
以上就是源代码了,等下慢慢来解读我的程序是怎么写的
再附上嵌入网页的源码
<html> <applet code="frame.class" codebase = "applet" width="320" height="320"> </applet> </html>
这个网页代码很简单
applet是网页中嵌入的小程序,宽和高为320
这个是小程序的截图
使用方法:在x长度和y长度里面输入两个数字,分别是要输入数组的两个维度,x为横向长度,y为纵向长度
在输入完x和y以后在下面的文本框中输入测试数据,比如
在输入完毕以后点击“开始”开始运算,弹出窗口并显示结果
这就是最终答案:12
介绍一下这个小程序是怎么写的:
先说说界面部分
import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class frame extends JApplet implements ActionListener{ private FlowLayout fl=new FlowLayout(FlowLayout.CENTER); private JButton bt=new JButton("开始"); private JLabel lbx=new JLabel("x长度"); private JLabel lby=new JLabel("y长度"); private JTextField tfx=new JTextField(2); private JTextField tfy=new JTextField(2); private JPanel jpl=new JPanel(); private JPanel arr=new JPanel(); private JTextField[][] a=new JTextField[6][6]; public frame() { jpl.add(bt); jpl.add(lbx); jpl.add(tfx); jpl.add(lby); jpl.add(tfy); arr.setLayout(new GridLayout(6,6)); for(int i=0;i<6;i++) for(int j=0;j<6;j++) { a[i][j]=new JTextField(2); arr.add(a[i][j]); } jpl.setSize(200,200); bt.addActionListener(this); this.add(jpl); this.add(arr); this.setLayout(fl); this.setSize(250,250); this.setVisible(true); }
import几个需要用到的方法,创建了一个名为开始的button和x,y轴长度的标签和输入文本框
然后注册了一个jpl的框体,将button,两个标签以及两个文本框放到这个jpl框体中
然后通过数组创建了一个6*6的JTextfield文本框,这个创建花了我很久的时间
刚开始想一个个的手打一个个的创建,后来实在觉得一定可以用for循环来创建
但是百度和书本都没有关于批量创建和引用的内容,于是自己慢慢摸索,写出了这两部分代码发现可以执行并且能够知道文本框的名字
private JTextField[][] a=new JTextField[6][6]; ....... ..... arr.setLayout(new GridLayout(6,6)); for(int i=0;i<6;i++) for(int j=0;j<6;j++) { a[i][j]=new JTextField(2); arr.add(a[i][j]); }
上面是声明文本框数组变量
下面的部分是创建一个名为arr的框体,设置arr框体的布局为GRIDLAYOUT
通过两个for循环为每个JTEXTFIELD附上名字并且添加到arr的框体当中
然后通过
this.add(arr);
这个语句将arr框体添加到总框体frame当中。
然后完成的效果就是
上面的第一排是Jpl框体,下面的GRID是arr框体,他们共同被放在frame里面
写完这段界面整整花掉了6个小时啊!!!(学渣你伤不起,从0开始啊!写这个程序之前JAVA怎么写我都不知道。。不说了,都是泪)
介绍完框架,开始绑定函数和添加监听了(监听是什么神奇的东西,我什么都不知道啊!)
学习事件和监听的基础,用时3小时~
public class frame extends JApplet implements ActionListener{ ... ... ... bt.addActionListener(this); ... ... ... public void actionPerformed(ActionEvent e){
这算是个基本格式了
利用的是点击按钮触发事件的方式
在下面的actionperformed里面写要执行的动作就行了
先测试了一发点击按钮生成对话框的功能
JOptionPane.showMessageDialog( this ,“shit!”);
发现屏幕上真的出现了一个消息窗口对我说“shit!”
这真是个好消息
后面的工作可以慢慢来了
找到第二次作业的代码,经过长时间的改动和测试改成了在java中能使用的代码,由杨超同学主力完成,我来辅助
public int find(int x,int y,int b[][]){ int s,sum,n; int max; int c[][]=new int[100][100]; for(int i=0;i<x;i++) { n=0; for(int j=0;j<y;j++) { sum=0; for(int t=j;t>=0;t--) { sum=sum+b[t][i]; c [i]=sum; n++; } } } max=c[0][0]; for(int i=0;i<(y*(y+1)/2);i++) { s=c[i][0]; for(int j=1;j<x;j++){ s+=c[i][j]; if(s<c[i][j])s=c[i][j]; if (max<s) max=s; } } return max; /* */ }
然后在调用函数的过程中发现了一个严重的问题!!
Jtextfield的内容为String,要处理的数组要int,怎么转换啊?
尝试了半天,发现要利用一个叫做
Integer.parseInt()的函数
问题又能解决了
利用Integer.parseInt()和gettext()
我顺利的从文本框中得到了我需要的文字,并且是整形的哦~
问我如何知道?我把
JOptionPane.showMessageDialog( this ,“shit”)改成了JOptionPane.showMessageDialog( this ,b[0][0]+b[0][1]);
如果没有转换成int,还是string的话我在b00和b01的位置分别输入1和2,那么信息盒子给出的结果一定是12(string的加号是连接)
如果转化成了整形,那么信息盒子给出的一定是3(int的加号是数学加)。机智!!!!!
又花了一个小时把这个程序搞定
开始测试
把生成的.class拷贝到网页的applet文件夹下面,打开网页,当当当当!!!!!成功了
真是不容易
当然还有未完成的一些功能,比如在显示结果的同时将最大和的矩形通过颜色标记出来。这个可以实现,但是对于我来说需要不少的时间,先交个基础版的吧。
题外话
结对编程让我学到了很多,也让我找到了乐趣,在和同学讨论一个程序如何实现的过程中,我能够听到别人的想法,并用别人的想法来优化我的思路,这样的设计软件的方法真是不错
这次作业做了很久,是今天早晨在完成的全部的工作,下午把博客写完,博客也写了不少时间,貌似超过了规定的交作业时间一点点,希望老师能够通融
我真的有在很努力的写程序,实在因为水平有限,而且时间不是很多,以后还要多靠大神,谁让我自己是个“坑”~~~
相关文章推荐
- 数据结构课后小作业 最大连续子序列和
- 第三次C程序语言设计作业
- 设计模式第三次作业
- 【编程珠玑-读书笔记】算法设计技术—以求解"最大连续子序列和"为例
- 高级软件工程第三次作业——原型设计(结对第一次)
- [作业2]C++第三次实验(基础班)——选择结构设计
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- homework-02,第二次作业——寻找矩阵最大子序列和
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 设计模式第三次作业
- 第十二周作业:GUI图形界面设计--JFrame
- PAT程序设计考题——甲级1007 (最大连续子序列和)
- 第三次作业GUI文本编辑器
- 第七周作业——动态规划求最大递增子序列
- PAT程序设计考题——甲级1007 (最大连续子序列和) C++实现