java课程设计实验报告
一 一 实验目的
加深学生对课堂讲授内容的理解,从计算机语言的基本概念、程序设计的基本方法、语法规则等方面加深理解,打好程序设计、开发软件的良好基础。在上机实验中,提高学生对 Java语言各部分内容的综合使用能力,逐步掌握 Java 语言程序设计的规律与技巧。在对 Java 程序的调试过程中,提高学生分析程序中出现的错误与排除这些错误的能力。通过上机实践,加深学生对计算机软件运行环境,以及对操作系统与计算机语言支持系统相互关系的了解。
二、实验要求
(1)问题描述准确、规范;
(2)程序结构合理,调试数据准确、有代表性; (3)界面布局整齐,人机交互方便; (4)输出结果正确; (5)正确撰写实验报告。
三、设计内容
1 1 、计算器
计算器要有 GUI 界面,用户可以输入所需计算的数值,可以进行加、减、乘、除四种最基本的运算与混合运算,可以求一个数值的平方及倒数,可以进行阶乘运算,要能运算小数,并且不会产生精度损失,在必要情况下,可以进行四舍五入的运算。允许正负数间的运算。要求使用 Applet 实现该计算器,当用浏览器运行程序时,点击网页中的按钮,则计算器弹出,浮在网页上,再次点击按钮时,计算器消失。
2 2 、文本编辑器
可以设置文本的字体、大小、颜色等基本参数,可以读取计算机中 TXT 文件,可以生成一个新的 TXT 文件。其她功能参照 windows 的文本编辑器。
四 四. 实验步骤 (1)上机实验之前,为课程设计的内容作好充分准备。对每次上机需要完成的任务进行认真的分析,画出程序流程图,手工写出符合任务要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。
(2)按照实验目的与实验内容进行上机操作。录入程序,编译调试,反复修改,直到使程序正常运行,得出正确的输出结果为止。
(3)根据实验结果,写出实验报告。
五、 、 源代码及运行结果
1. 计算器源代码 import java、awt、*; import java、awt、event、*; import java、lang、*;
import javax、swing、*; public class jisuanqi extends WindowAdapter { //创建三个面板
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
TextField txt;
private Button[] b = new Button[21];
private String ss[] = { "7", "8", "9", "/","清空" ,"4", "5", "6", "*","1/x", "1", "2",
"3", "-","平方",
"0", "、", "=", "+","n!" ,"关闭" };
static double
a, sum=1;
static String s,
str ;//定义变量 创建对像 //创建文本框
public static void main(String args[])
{
(new jisuanqi())、frame();
}
public void frame()
{
//设置文本框的名称
Frame fm = new Frame("简单计算器");
for (int i = 0; i <= 20; i++)
{
b[i] = new Button(ss[i]);
}
for (int i = 0; i <= 19; i++)
{
p2、add(b[i]); //创建按钮 并添加到 P2
}
//按钮 20 背景色黄色
b[20]、setBackground(Color、yellow);
txt = new TextField("");
txt、setEditable(false);//不能编辑文本框里面的内容
txt、setBackground(Color、white);
for (int i = 0; i <= 20; i++)
{
b[i]、addActionListener(new buttonlistener());//添加监听器
} //设置关闭按钮
b[20]、addActionListener(new close());
fm、addWindowListener(this);
p1、setLayout(new BorderLayout());//设置布局管理器
p1、add(txt, "North");//p1 面板放到区域南部
p2、setLayout(new GridLayout(4, 5,2,2));//布局:四行五列,间隔为二
p2、setBackground(Color、red);
p3、setLayout(new BorderLayout());
p3、add(b[20]);
将三个面板分别放到不同位置
fm、add(p1, "North");
fm、add(p2, "Center");
fm、add(p3, "South");
fm、pack();
fm、setVisible(true);//都就是些窗中设置 添加相关组件与监听器
}
public void windowClosing(WindowEvent e) {
System、exit(0);//退出系统
} class buttonlistener implements ActionListener
{ //编写监听器事件 通过按键得出给果
public void actionPerformed(ActionEvent e)
{
Button btn = (Button) e、getSource();
if (btn、getLabel() == "=")
{
jisuan();
str = String、valueOf(a);
txt、setText(str);//显示当前数字
s = "";//清零
}
else if
(btn、getLabel() == "+")
{
//设置一个方法
jisuan();
txt、setText("");
s = "+";
}
else if
(btn、getLabel() == "-")
{
jisuan();
txt、setText("");
s = "-";
} else if
(btn、getLabel() == "/")
{
jisuan();
txt、setText("");
s = "/";
} else if
(btn、getLabel() == "*")
{
jisuan();
txt、setText("");
s = "*"; } else if
(btn、getLabel()=="平方")
{
a=Double、parseDouble(txt、getText());
a*=a;
txt、setText(""+String、valueOf(a));
} else if
(btn、getLabel()=="n!")
{
a=Double、parseDouble(txt、getText());
sum=1;
for (int i=1;i<=a;i++)
sum=sum*i;
txt、setText(""+String、valueOf(sum));
} else if btn、getLabel()=="1/x")
{
a=Double、parseDouble(txt、getText());
txt、setText(""+String、valueOf(1/a));
}
else
{
txt、setText(txt、getText() + btn、getLabel());
if (btn、getLabel() == "清空")
txt、setText("");
} }
public void jisuan() {//编写具体计算方法
if (s == "+")
a += Double、parseDouble(txt、getText());
else if (s == "-")
a -= Double、parseDouble(txt、getText());
else if (s == "*")
a *= Double、parseDouble(txt、getText());
else if (s == "/")
a /= Double、parseDouble(txt、getText());
else
a = Double、parseDouble(txt、getText());
} } } class close implements ActionListener
{ //退出
public void actionPerformed(ActionEvent e)
{
System、exit(0);
} } 、2 、 计算器 运行界面 (1 1 )
计算器主界面
(2 2 )
面板的实现
1 1 、创建三个面板分别就是显示数字的面板、按钮的面板与“关闭”的面板
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel(); 2 2 、创建一个文本框参数
TextField txt; 3 3 、创建一群按钮参数并给按钮赋值
private Button[] b = new Button[21];
private String ss[] = { "7", "8", "9", "/","清空" ,"4", "5", "6", "*","1/x", "1", "2",
"3", "-","平方",
"0", "、", "=", "+","n!" ,"关闭" }; 4 4 、创建文本框
public static void main(String args[])
{
(new jisuanqi())、frame();
} 5 5 、设置文本框方法
public void frame()
{ //设置文本框的名称
Frame fm = new Frame("简单计算器"); 6 6 、设置按钮
for (int i = 0; i <= 20; i++)
{
b[i] = new Button(ss[i]);
}
7 7 、设将按钮添加到面板
for (int i = 0; i <= 19; i++)
{
p2、add(b[i]); //创建按钮 并添加到 P2
}
8 8 、设置按钮 0 20 背景色黄色
b[20]、setBackground(Color、yellow); 9 9 、创建文本框, , 并规定不能编辑内容与背景为白色
txt = new TextField("");
txt、setEditable(false);
txt、setBackground(Color、white); 10 、为按钮添加监听器
for (int i = 0; i <= 20; i++)
{
b[i]、addActionListener(new buttonlistener());//添加监听器
} 11 、设置“关闭 ” 按钮可以关闭界面并设置监听器
b[20]、addActionListener(new close());
fm、addWindowListener(this);
12 、设置布局
p1、setLayout(new BorderLayout());//设置布局管理器
p1、add(txt, "North");//p1 面板放到区域南部
p2、setLayout(new GridLayout(4, 5,2,2));//布局:四行五列,间隔为二
p2、setBackground(Color、red);
p3、setLayout(new BorderLayout());
p3、add(b[20]);
13 、将三个面板分别放到不同位置
fm、add(p1, "North");
fm、add(p2, "Center");
fm、add(p3, "South");
fm、pack();
fm、setVisible(true);//都就是些窗中设置 添加相关组件与监听器
} 14 、退出系统
public void windowClosing(WindowEvent e)
{
System、exit(0);
} (3 3 )
将按钮添加到计算这个事件中
1 1 、 编写监听器事件
通过按键得出给果
public void actionPerformed(ActionEvent e)
{ //将按钮赋予这个事件中
Button btn = (Button) e、getSource();
2 2 、如果点击“= = ”这个按钮, , 将出现当前数字
if (btn、getLabel() == "=")
{
jisuan();
str = String、valueOf(a);
txt、setText(str);//显示当前数字
s = "";//清零
}
3 3 、如果点击“+ + ”“- - ”“* * ”“/ / ”分别完成一个方法并将结果显示到 文本框
else if
(btn、getLabel() == "+")
{
//设置一个方法
jisuan();
txt、setText("");
s = "+";
}
else if
(btn、getLabel() == "-")
{
jisuan();
txt、setText("");
s = "-";
} else if
(btn、getLabel() == "/")
{
jisuan();
txt、setText("");
s = "/";
} else if
(btn、getLabel() == "*")
{
jisuan();
txt、setText("");
s = "*"; } 4 4 、如果点击“平方”则当前数字与原数字形成即完成相关方法
结果显示最终的数字
else if
(btn、getLabel()=="平方")
{
a=Double、parseDouble(txt、getText());
a*=a;
txt、setText(""+String、valueOf(a)); //显示 a } 5 5 、当输入“n n !”, , 就用 r for 循环完成阶乘, , 此方法属于 c c 语言基础方法, ,
不做相关解释
else if
(btn、getLabel()=="n!")
{
a=Double、parseDouble(txt、getText());
sum=1;//归一
for (int i=1;i<=a;i++)
sum=sum*i;
txt、setText(""+String、valueOf(sum)); //文本框中显示“sum”的数值 }
6 6 、当输入“ 1/x ”时, , 显示 1/a 。
else if btn、getLabel()=="1/x")
{
a=Double、parseDouble(txt、getText());
txt、setText(""+String、valueOf(1/a));
}
7. 如果输入“清空”文本框成为空文本框
else
{
txt、setText(txt、getText() + btn、getLabel());
if (btn、getLabel() == "清空")
txt、setText("");
} (4 4 )
设置“ jisuan ”方法
1 1 、编写具体计算方法其实这些方法可以放到上面事件的实现中, , 从
” “平方”, , “n n” !”, , “ 1/x ”就 可 以 瞧 出 。
但 为 了 程 序 的 美 观 与 高 识 别 性 , , 我 们 传 建 一 个 方 法 来 实 现
if (s == "+")
a += Double、parseDouble(txt、getText());
else if (s == "-")
a -= Double、parseDouble(txt、getText());
else if (s == "*")
a *= Double、parseDouble(txt、getText());
else if (s == "/")
a /= Double、parseDouble(txt、getText());
else
a = Double、parseDouble(txt、getText());
3. 文本编辑器 源代码
import java、awt、*; import javax、swing、*; import java、awt、event、*;
import javax、swing、event、*; import java、io、*; public class TextEditor {
public static void main(String args[])
{
TextFrame frame=new TextFrame();
frame、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);
frame、show();
}
} class TextFrame extends JFrame {
//文件中的参数
= null;
static String d,k,s;
//编辑中的参数
String selected,text;
//格式中的参数
String sizeNames[] ={"5","10","15","20","25","30","35","40","45","50"};
String colorNames[] ={"黑色","红色","蓝色","绿色","白色","黄色","粉红"};
String fontNames[]={"宋体","华文行楷","隶书","黑体","仿宋","华文彩云","楷体","方正姚体"};
String styleNames[] = { "粗体", "斜体" };
public TextFrame()
{ //设置文本框大小、名称
setTitle("西西牌文本编辑器");
setSize(400,400);
addWindowListener(new LogoutAction());
J();//创建一个文件选择器
//创建文本区
t1=new JTextArea(0,0);//面板与文本框无间隙
scrollPane=new JScrollPane(t1);//设置滚动条
getContentPane()、add(scrollPane);
//创建菜单栏
menuBar=new JMenuBar();
setJMenuBar(menuBar);
//文件
JMenu("文件(F)");
("F");//设置快捷键
newItem=new JMenuItem("新建(N)","N");
openItem=new JMenuItem("打开(O)、、、","O");
saveItem=new JMenuItem("保存(S)","S");
exitItem=new JMenuItem("退出(E)","E");
//设置监听器
newItem、addActionListener(new ());
openItem、addActionListener(new ());
saveItem、addActionListener(new ());
exitItem、addActionListener(new ());
//设置加速器
newItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_N,InputEvent、CTRL_MASK));
openItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_O,InputEvent、CTRL_MASK)); saveItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_S,InputEvent、CTRL_MASK));
//添加按钮到文件菜单栏
(newItem);
(openItem);
(saveItem);
(exitItem);
//编辑
edit=new JMenu("编辑(E)");
edit、setMnemonic("E");
//创建菜单项
cutItem=new JMenuItem("剪切(T)");
copyItem=new JMenuItem("复制(C)");
pasteItem=new JMenuItem("粘贴(P)");
deleteItem=new JMenuItem("删除(L)");
selectAllItem=new JMenuItem("全选(A)");
//设置加速器
cutItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_X,InputEvent 、CTRL_MASK));
copyItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_C,InputEvent 、CTRL_MASK));
pasteItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_V,InputEvent 、CTRL_MASK));
deleteItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_L,InputEvent 、CTRL_MASK));
selectAllItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_A,InputEvent、
CTRL_MASK));
//设置监听器
cutItem、addActionListener(new EditListener());
copyItem、addActionListener(new EditListener());
pasteItem、addActionListener(new EditListener());
deleteItem、addActionListener(new EditListener());
selectAllItem、addActionListener(new EditListener());
//添加按钮到“编辑”菜单栏
edit、add(cutItem);
edit、add(copyItem);
edit、add(pasteItem);
edit、add(deleteItem);
edit、add(selectAllItem);
// 格式
format=new JMenu("格式(O)");
format、setMnemonic("O");
sizeItem=new JMenu("字体大小");
colorItem=new JMenu("字体颜色");
fontItem=new JMenu("字体");
styleItem=new JMenu("字体风格");
sizes = new JRadioButtonMenuItem[sizeNames、length];
colors = new JRadioButtonMenuItem[colorNames、length];
fonts = new JRadioButtonMenuItem[fontNames、length];
styles=new JCheckBoxMenuItem[styleNames、length];
styleGroup=new ButtonGroup();
fontGroup = new ButtonGroup();
colorGroup = new ButtonGroup();
sizeGroup = new ButtonGroup();
//将每种元素放进菜单项与按钮组中
for (int i=0;i<sizes、length;i++)
{
sizes[i]=new JRadioButtonMenuItem(sizeNames[i]);
sizes[i]、addItemListener(new FormatListener());
sizeGroup、add(sizes[i]);
sizeItem、add(sizes[i]);
}
for (int i=0;i<colors、length;i++)
{
colors[i]=new JRadioButtonMenuItem(colorNames[i]);
colors[i]、addItemListener(new FormatListener());
colorGroup、add(colors[i]);
colorItem、add(colors[i]);
}
for (int i=0;i<fonts、length;i++)
{
fonts[i]=new JRadioButtonMenuItem(fontNames[i]);
fonts[i]、addItemListener(new FormatListener());
fontGroup、add(fonts[i]);
fontItem、add(fonts[i]);
}
for(int i=0;i<styles、length;i++)
{
styles[i]=new JCheckBoxMenuItem(styleNames[i]);
styles[i]、addItemListener(new FormatListener());
styleItem、add(styles[i]);
}
format、add(sizeItem);
format、add(colorItem);
format、add(fontItem);
format、add(styleItem);
//查瞧
view=new JMenu("关于我们(us)");
view、setMnemonic("U");
formItem=new JMenuItem("组成成员");
formItem、addActionListener(new ViewListener());
impressionItem=new JMenuItem("学习感言");
impressionItem、addActionListener(new ViewListener());
view、add(formItem);
view、add(impressionItem);
//将菜单添加到菜单栏中
menuBar、add(files);
menuBar、add(edit);
menuBar、add(format);
menuBar、add(view);
//弹出式菜单及其菜单项
popup=new JPopupMenu();
cutItemPop=new JMenuItem("剪切(T)");
cutItemPop、addActionListener(new EditListener());
copyItemPop=new JMenuItem("复制(C)");
copyItemPop、addActionListener(new EditListener());
pasteItemPop=new JMenuItem("粘贴(P)");
pasteItemPop、addActionListener(new EditListener());
deleteItemPop=new JMenuItem("删除(L)");
deleteItemPop、addActionListener(new EditListener());
selectAllItemPop=new JMenuItem("全选(A)");
selectAllItemPop、addActionListener(new EditListener());
//添加
popup、add(cutItemPop);
popup、add(copyItemPop);
popup、add(pasteItemPop);
popup、add(deleteItemPop);
popup、add(selectAllItemPop);
//实现弹出式菜单的弹出触发器
t1、addMouseListener(new MouseAdapter()
{
//释放按钮触发事件
public void mouseReleased(MouseEvent e)
{
if(e、isPopupTrigger()) //指定弹出式菜单的成员以及显示位置
popup、show(e、getComponent(),e、getX(),e、getY());
}
}
);
}
private class
implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//"新建"
if(e、getSource()==newItem)
{
t1、setText("");
;
}
//"打开"
if(e、getSource()==openItem)
{
if()
(file);
int m=(TextFrame、this);
if( m==J)
{
();
openFile();
}
}
//"保存"
if(e、getSource()==saveItem)
{
d=t1、getText();
if() (file); //显示保存对话框
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
//"退出"
if(e、getSource()==exitItem)
{
k=t1、getText(); //如果文本为空或已保存,直接退出,否则保存后退出
if(k、equals("")) System、exit(0);
else if(k、equals(d)) System、exit(0);
else
{
TextFrame f=new TextFrame();//新建确认型对话框
int n=JOptionPane、showConfirmDialog(
f,"就是否将文件保存到当前位置?",
"退出",JOptionPane、YES_NO_CANCEL_OPTION);
if(n==JOptionPane、YES_OPTION)//如果选择“就是”,则保存文件
{
if() (file);
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);
}
}
}
}
void openFile()//打开的方法
{
try
{
fr=new (file); //类用于读取字符流
int len=(int)();
char []buffer=new char[len]; //以 file 的字符数开辟一段缓冲区
fr、read(buffer,0,len); //将 fr 从 file 中读取的字符读入数组 buffer中的某一部分,
fr、close(); //关闭该流
t1、setText(new String(buffer));
}
catch(Exception e)//抛出异常
{e、printStackTrace();}
}
void saveFile()//保存的方法
{
try
{
fw=new (file); //类用于写入字符流
fw、write(t1、getText());//将 t1 里的内容写入 file
fw、close(); //关闭该流
}
catch(Exception e)
{e、printStackTrace();}
} } private class LogoutAction extends WindowAdapter//实现点击窗口退出事件监听器
{
public void windowClosing(WindowEvent e)
{
s=t1、getText();
if(s、equals("")) System、exit(0);
else if(s、equals(d)) System、exit(0);
else{
TextFrame f=new TextFrame();//新建确认型对话框
int n=JOptionPane、showConfirmDialog(
f,"就是否将文件保存到当前位置?",
"退出",JOptionPane、YES_NO_OPTION);
if(n==JOptionPane、YES_OPTION)//如果选择“就是”,则保存文件
{
if() (file);
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);}
}
}
void saveFile()//保存的方法
{
try
{
fw=new (file); //类用于写入字符流
fw、write(t1、getText());//将 t1 里的内容写入 file
fw、close(); //关闭该流
}
catch(Exception e)
{e、printStackTrace();}
}
} private class EditListener implements ActionListener {
public void actionPerformed(ActionEvent e)
{
//剪切
if(e、getSource()==cutItem||e、getSource()==cutItemPop)
{
t1、cut();
}
//复制
if(e、getSource()==copyItem||e、getSource()==copyItemPop)
{
t1、copy();
}
//粘贴
if(e、getSource()==pasteItem||e、getSource()==pasteItemPop)
{
t1、paste();
}
//删除
if(e、getSource()==deleteItem||e、getSource()==deleteItemPop)
{
text=t1、getText();
selected=t1、getSelectedText();
int id=text、indexOf(selected);
int start=id+selected、length();
int end=text、length();
String rest=text、substring(start,end);
t1、replaceRange(rest,id,end);
int a=id;
}
//全选
if(e、getSource()==selectAllItem||e、getSource()==selectAllItemPop)
{
t1、selectAll();
}
}
}
private class FormatListener implements ItemListener
//若用此类作监听器,要用 addItemListener 方法注册监听器
{
public void itemStateChanged(ItemEvent e)
{
//设置字体风格(复选)
int
style=0;
if(styles[0]、isSelected())
style+=Font、BOLD;
if(styles[1]、isSelected())
style+=Font、ITALIC;
t1、setFont(new Font(t1、getFont()、getName(),style,t1、getFont()、getSize()));
//设置字体
for (int i=0;i<fonts、length;i++)
if(e、getSource()==fonts[i])
t1、setFont(new Font(fontNames[i],style,t1、getFont()、getSize()));
//设置字体大小
for(int j=0;j<sizes、length;j++)
if(e、getSource()==sizes[j])
t1、setFont(new Font(t1、getFont()、getName(),style,5*j));
//设置字体颜色
if(e、getSource()==colors[0])
t1、setForeground(Color、black);
if(e、getSource()==colors[1])
t1、setForeground(Color、red);
if(e、getSource()==colors[2])
t1、setForeground(Color、blue);
if(e、getSource()==colors[3])
t1、setForeground(Color、green);
if(e、getSource()==colors[4])
t1、setForeground(Color、white);
if(e、getSource()==colors[5])
t1、setForeground(Color、yellow);
if(e、getSource()==colors[6])
t1、setForeground(Color、pink);
}
}
private class ViewListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//关于主题
if(e、getSource()==formItem)
{
JOptionPane、showMessageDialog(null, "闫曦
王鑫
冯爽", "成员机构",JOptionPane、INFORMATION_MESSAGE);
}
//关于本产品
if(e、getSource()==impressionItem)
{
JOptionPane、showMessageDialog(null, "经过半个多学期的学习,"+"\n"+"我们队 java 有了一些了解,"
+"\n"+"并伴有极大的兴趣"+"\n"+"也对软件的瞧法有所改观。"+"\n"+"感谢老师的教导,"+"\n"+
"同时也希望我们能编出一些新的"+"\n"+"软件,为社会做出应有的贡献",
" 学 习 感 言 ",JOptionPane 、INFORMATION_MESSAGE);
}
}
}
J ;
JTextArea t1;
JScrollPane scrollPane;
JMenuBar menuBar;//菜单栏
JPopupMenu popup;//弹出式菜单
JMenu
文件,编辑,格式,查瞧
JMenuItem newItem,openItem,saveItem,exitItem,//新建,打开,保存,打印,退出
cutItem,copyItem,pasteItem,deleteItem,selectAllItem,//剪切,复制,粘贴,删除,全选
cutItemPop,copyItemPop,pasteItemPop,deleteItemPop,selectAllItemPop,//剪切,复制,粘贴,保存,删除,全选
sizeItem,fontItem,styleItem,colorItem,//字体大小,字体,字体风格,颜色
formItem,impressionItem;//关于我们
private JCheckBoxMenuItem styles[];
private JRadioButtonMenuItem sizes[],colors[],fonts[];
private ButtonGroup sizeGroup,colorGroup,fontGroup,styleGroup; } 、4. 文本编辑器运行界面
(1 1 )
文件等原件放入菜单栏
(2 2 )
引入对话框 int m=(TextFrame 、 this);
(3 3 )
出现一个对话框来判断就是否退出
//如果文本为空或已保存,直接退出,否则保存后退出 if(k、equals("")) System、exit(0);
else if(k、equals(d)) System、exit(0); else
{
TextFrame f=new TextFrame();//新建确认型对话框
int n=JOptionPane、showConfirmDialog(
f,"就是否将文件保存到当前位置?",
"退出",JOptionPane、YES_NO_CANCEL_OPTION);
if(n==JOptionPane、YES_OPTION)//如果选择“就是”,则保存文件
{
if() (file);
int m=(TextFrame、this); if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);
}
}
}
(4 4 )
JOptionPane 、 YES_NO_CANCEL_OPTION
这句话决定有几个选项
(5 5 )
设置单选框与复选框, , 形式不太相同
// 格式
format=new JMenu("格式(O)");
format、setMnemonic("O");
sizeItem=new JMenu("字体大小");
colorItem=new JMenu("字体颜色");
fontItem=new JMenu("字体");
styleItem=new JMenu("字体风格");
sizes = new JRadioButtonMenuItem[sizeNames、length];
colors = new JRadioButtonMenuItem[colorNames、length];
fonts = new JRadioButtonMenuItem[fontNames、length];
styles=new JCheckBoxMenuItem[styleNames、length];
styleGroup=new ButtonGroup();
fontGroup = new ButtonGroup();
colorGroup = new ButtonGroup();
sizeGroup = new ButtonGroup();
(6 6 )
不 存 在 判 断 , , 息 只 就 是 需 要 确 认 信 息 e JOptionPane 、INFORMATION_MESSAGE
//查瞧
view=new JMenu("关于我们(us)");
view、setMnemonic("U");
formItem=new JMenuItem("组成成员");
formItem、addActionListener(new ViewListener());
impressionItem=new JMenuItem("学习感言");
impressionItem、addActionListener(new ViewListener());
view、add(formItem);
view、add(impressionItem); //关于主题
if(e、getSource()==formItem)
{
JOptionPane、showMessageDialog(null, "闫曦
王鑫
冯爽", "成员机构",JOptionPane、INFORMATION_MESSAGE);
}
//关于本产品
if(e、getSource()==impressionItem)
{
JOptionPane、showMessageDialog(null, "经过半个多学期的学习,"+"\n"+"我们队 java 有了一些了解,"
+"\n"+"并伴有极大的兴趣"+"\n"+"也对软件的瞧法有所改观。"+"\n"+"感谢老师的教导,"+"\n"+
"同时也希望我们能编出一些新的"+"\n"+"软件,为社会做出应有的贡献", "学习感言",JOptionPane、INFORMATION_MESSAGE);
}
(7 7 )
编辑框的实现
//编辑
edit=new JMenu("编辑(E)");
edit、setMnemonic("E");
//创建菜单项
cutItem=new JMenuItem("剪切(T)");
copyItem=new JMenuItem("复制(C)");
pasteItem=new JMenuItem("粘贴(P)");
deleteItem=new JMenuItem("删除(L)");
selectAllItem=new JMenuItem("全选(A)");
//加速器
cutItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_X,InputEvent、CTRL_MASK));
copyItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_C,InputEvent、CTRL_MASK));
pasteItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_V,InputEvent、CTRL_MASK));
deleteItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_L,InputEvent、CTRL_MASK));
selectAllItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_A,InputEvent、CTRL_MASK));
//监听器
cutItem、addActionListener(new EditListener());
copyItem、addActionListener(new EditListener());
pasteItem、addActionListener(new EditListener());
deleteItem、addActionListener(new EditListener());
selectAllItem、addActionListener(new EditListener());
//添加
edit、add(cutItem);
edit、add(copyItem);
edit、add(pasteItem);
edit、add(deleteItem);
edit、add(selectAllItem);
(8)
弹出式菜单的实现
//弹出式菜单及其菜单项
popup=new JPopupMenu();
cutItemPop=new JMenuItem("剪切(T)");
cutItemPop、addActionListener(new EditListener());
copyItemPop=new JMenuItem("复制(C)");
copyItemPop、addActionListener(new EditListener());
pasteItemPop=new JMenuItem("粘贴(P)");
pasteItemPop、addActionListener(new EditListener());
deleteItemPop=new JMenuItem("删除(L)");
deleteItemPop、addActionListener(new EditListener());
selectAllItemPop=new JMenuItem("全选(A)");
selectAllItemPop、addActionListener(new EditListener());
//添加
popup、add(cutItemPop);
popup、add(copyItemPop);
popup、add(pasteItemPop);
popup、add(deleteItemPop);
popup、add(selectAllItemPop);
//实现弹出式菜单的弹出触发器
t1、addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
if(e、isPopupTrigger())
popup、show(e、getComponent(),e、getX(),e、getY());//指定弹出式菜单的成员以及显示位置
}
}
六、 、 程序流程图 ❶ 计算器
❷ 文本编辑器
七、 、 心得体会 转眼间半个学期的java课程都学完了,从起初对Java的一无所知,到如今可以编写很多Java 程序,整个过程中对 Java 颇有感受。在前十周中我们学习了有关 Java 的一些简单知识,但就是感觉一头雾水,不知其然,当然也更不知其所以然,本次就是我第一次使用 JAVA 来编写我认为使用的程序,感觉很就是不一样,虽然不能说精通,但可以自豪的说:我们知其然。这也使得我萌生一个想法:如果java考试能在课程设计与java实验之后考,我想我的成绩会更好一些。这三周的上机也我们有了更多的实地操作经验。
在这次实验中,我意识到无论多么复杂的程序都就是要用许多简单的程序组合而成,不要小瞧一个面板的设置,面板也可以分为很多种,就比如 TextPanel、ButtonPanel 等等都有不同的用处,而且还要排版,这就是我们就需要从课外学习一些新的知识来使面板的布局更加美观、更加人性化。没有一个程序就是在我们没有思考就能做出来的,当然没有一道题就是在我们思考就是讨论之后还做不出来的。当然这也要结合我们的实际情况。我们组虽然做的不如有的人好,界面不就是足够美观,功能不就是足够强大,但就是我们在这之前就确定一个中心思想:充分运用书本知识。所以在我们的程序中绝大多数代码都可以在书中找到。不过有些方法就是我们力所不能及的,比如 GridLayout 的布局,从外面流入一个对话框等等。当然我们的方法并不高级,以至于不就是很美观,但就是却就是我们积极的从课外书中找到的。
在这三周的学习中我们从一开始的各自做各自的到后来的积极讨论,积极向老师同学请教。平心而论,这确实就是一个好方法,正所谓“听君一席话,胜读十年书”,这要比自己从书中苦苦寻求答案要快得多,也记的更牢。我们在做完自己的作品后也会去瞧瞧别人的代码,瞧瞧与自己有什么不同,或者自己有什么地方比别人繁琐,有一个地方我印象很深刻,就就是剪切复制等方法的实现只需要设置 cut()、copy()等,而不需要再写关于选定区域的方法: // 剪切
if(e 、 getSource()==cutItem||e 、 getSource()==cutItemPop)
{
text=t1 、 getText();
selected=t1 、 getSelectedText();
a=text 、 indexOf(selected); ;
t1 、 cut();
f=1;
} }
当然像这样的大大小小的改动就是必须的,我们也乐此不疲。一次次的为自己的一个收获而欢呼雀跃。
通过这次实验课程,我也添加了不少自信。最开始学这本书的时候,很多朋友跟我说:“数学不好就是学不好这些的!”我听了相当恐惧,因为文化课中我最差劲的科目就就是数学。但就是当我坚持到现在,我想我可以完全否定这句话,没有人可以给自己下定论,没有人可以说自己学不好或做不好什么,只要下了功夫,只要勤加练习,总会成功的。所以今后的课程,我会抱着更大的自信与更谨慎的态度去学习。
Java 这本书,对我来说,就是走进编程世界的第一个起点,它对我至关重要,从中我了解了编程人员的辛苦,同时也建立的不少的信心,我希望在未来的学习过程中,一直用学习这本书时候的态度作为一个衡量的尺度,还就是那句老话“勤能补拙”。就像在第一题中,我们就针对面板采取了很多方案,有时候都想过要偷懒,就比如 BorderLayout 这个布局管理器的按钮大小就是根据按钮里面内容的多少而确定的,并不能实现充分利用文本域。我们就在想可不可以将每个按钮中的内容都填成个位数或者就是两位数,这样就可以投机取巧用一个简单的代码完成复杂的程序,但问题出现啦,当文本框拉长之后就走型了,于就是我们又在想把文本框的大小固定了老师就瞧不出来啦。虽然这方法很好,但终究不就是一个长远之计。最终我饿美女还就是用了 GridLayout 来规定几行几列,这样就无懈可击啦!这个代码的发现也让我们信心增进不少,让那个我们感觉到其实 java 的代码并不深奥,只要我们愿意去寻找与发现它们,就不困难。
而第二个实验较之第一个实验而言难度有所增加,但绝非我们力所不能及的,完全没有必要抄袭别人的方法,实验课也极度的使我的自信心膨胀,让我感觉到 java 并不就是可望而不可即的,我们完全有能力驾驭它。相信之后我能自己编出更多有用的程序来充实自己。
我还有很多东西要学,越就是学习我越就是觉得自己懂的东西太少。不过,好在我已经意识到了,接下来就就是努力,努力再努力!最后也祝各位合肥工业大学的辅导老师们身体健康,工作顺利!
上一篇:约瑟夫环问题实验报告
下一篇:安全生产自查报告