实验六 java中swing组件开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java中swing组件开发
一、实验目的
1、掌握swing组件开发模型
2、掌握flowlayout布局特点
3、掌握gridlayout布局特点
二、实验内容
1. 启动eclipse
2. 使用flowlayout创建登录界面
3. 使用borderlayout创建登录界面
三、实验步骤
1、实验内容及要求:
使用布局设计登录界面,要求输入用户名和密码正确才能登陆(验证方式不限)。
密码正确后进入系统主界面,主界面至少包括菜单条和文本区域(可以添加工具栏等)。
菜单至少包含“文件”、“编辑”、“格式”三个菜单(可自增加)。
每个菜单有相应菜单项,并要求点击相应菜单项可以实现相应行为。
如点击“文件”菜单中的“打开”菜单项时弹出“打开对话框”。
文本区域要有滚动条,并可进行文字编辑。
应用到的关键技术的详细说明。
可附相关的关键程序代码。
系统页面设计要求清晰、实用、美观。
2、代码:
(1)、LoginIn.java(登录页面)
1)、public class LoginIn extends JFrame{
JTextField f1; JTextField f2; JPanel p5;JButton b1; JButton b2;
LoginIn(){Container cp=getContentPane();
Label l1=new Label("用户:"); Label l2=new Label("密码:");
JPanel p1=new JPanel();JPanel p2=new JPanel();
JPanel p3=new JPanel();JPanel p4=new JPanel();
b1=new JButton("登录"); b2=new JButton("重置");p2.add(l1);
p2.add(f1);p3.add(l2);p3.add(f2);p4.add(b1);p4.add(b2);p5.add(p2); p5.add(p3);
p5.add(p4);cp.add(p5,BorderLayout.CENTER);b1.addActionListener(new Enter()); b2.addActionListener(new ReWrite());addWindowListener(new winClose());}
public static void main(String[] args) { LoginIn log=new LoginIn();
log.setTitle("系统登录");log.setSize(360,250);log.setVisible(true); }
2)点击按钮键监听器
class Enter implements ActionListener{
public void actionPerformed(ActionEvent e)
{ if((f1.getText()).equals("admin")&&(f2.getText()).equals("123")) {
JOptionPane.showMessageDialog(null, "登录成功!"); //进入写字板
new NewProgram().setVisible(true);setVisible(false);}
else JOptionPane.showMessageDialog(null, "登录失败,请重新登录!"); }} class ReWrite implements ActionListener{//重置
public void actionPerformed(ActionEvent e)
{f1.setText("");f2.setText("");f1.requestFocus();} }
class winClose extends WindowAdapter
{ public void windowClosing(WindowEvent e){ (e.getWindow()).dispose(); System.exit(0); }}}
3)运行程序如图a:当输入错误的用户名或密码时如图b:当输入正确的用户名和密码时,如图c:,点击确定,进入写字板图D:
a b c
D
(2)、写字板代码:
1)菜单
//新建菜单项监听器
New.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { NewProgram.this.setTitle("无标题- 记事本.txt"); ja.setText(""); } });
//退出菜单项监听器
exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)
{ fileName=NewProgram.this.getTitle(); if(flag==true)
{int i=JOptionPane.showConfirmDialog(null,
NewProgram.this.getTitle()+"的文字已经改变,想保存文件嘛?", "写字板",
JOptionPane.YES_NO_CANCEL_OPTION);});
//保存菜单项监听器
save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { FileDialog fd=new FileDialog(NewProgram.this,"保存",FileDialog.SA VE);
fd.setFile("*.txt"); fd.setVisible(true); filePath=fd.getDirectory();
fileName=fd.getFile(); try {FileWriter fw = new FileWriter(filePath+fileName);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw); pw.println(ja.getText()); pw.flush(); pw.close();
} catch(IOException ioe){ ioe.printStackTrace(); } } });
//另存为菜单项监听器
saveas.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) { FileDialog fd=new FileDialog(NewProgram.this,"另存为...",FileDialog.SA VE);
fd.setFile("*.txt"); fd.setVisible(true); filePath=fd.getDirectory();
fileName=fd.getFile(); try {FileWriter fw = new FileWriter(filePath+fileName);
BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(bw);
pw.println(ja.getText()); pw.flush(); pw.close(); } catch(IOException ioe)
{ ioe.printStackTrace(); } } });
//打开菜单项监听器
open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e)
{FileDialog fd1 = new FileDialog(NewProgram.this,"打开",FileDialog.LOAD);
fd1.setFile("*.txt"); fd1.setVisible(true); fileName=fd1.getFile();
filePath=fd1.getDirectory(); NewProgram.this.setTitle(fileName);
try { FileReader fr = new FileReader(filePath+fileName);
BufferedReader br = new BufferedReader(fr);
String sinput = ""; ja.setText(""); int lineNum = 0;
while ((sinput = br.readLine()) != null)// 读行,直到为空时停止循环
{ ja.append(sinput + "\r\n"); lineNum++; } } catch(IOException ex)
{ ex.printStackTrace(); }} });
2)、格式菜单
//加系统的字体设置
String[] fontNames=GraphicsEnvironment.getLocalGraphicsEnvironment
().getAvailableFontFamilyNames();
for(int i=0;i<fontNames.length;i++) { fontList.add(fontNames[i]); }
//字体颜色、大小、形状面板监听器:
color.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{ JColorChooser jColor=new JColorChooser(); //调用颜色面板,设置前景就可更改字体颜色Color fcolor=ja.getForeground();
ja.setForeground( jColor.showDialog(ja,"选择字体颜色",fcolor)); } });
cancel.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { fontMain.setVisible(false); }});
ok.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { fontMain.setVisible(false); } });
font.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fontJd.setLocationRelativeTo(NewProgram.this);
fontJd.setVisible(true); int style = 0; fontJd.dispose(); } } } });
//文件改变事件的监听器
ja.getDocument().addDocumentListener(new DocumentListener()
{ public void changedUpdate(DocumentEvent arg0) { flag=true; }
public void insertUpdate(DocumentEvent arg0) { flag=true; }
public void removeUpdate(DocumentEvent arg0) { flag=true; } });
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent w) {fileName=NewProgram.this.getTitle();if(flag==true)
{int i=JOptionPane.showConfirmDialog(null,
NewProgram.this.getTitle()+"的文字已经改变,想保存文件嘛?", "写字板",
JOptionPane.YES_NO_CANCEL_OPTION); });
3、编辑菜单
//右键快捷方式监听器
jcopy.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{ ja.copy(); } } ); jpaste.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { ja.paste(); } } );
jcut.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { ja.cut(); } });
jselectall.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { ja.selectAll(); } });
ja.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e)
{ if (e.isPopupTrigger()){ jp.show((Component) (e.getSource()), e.getX(), e.getY());
//复制菜单项监听器
copy.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { ja.copy(); } } );
//粘贴菜单项监听器
paste.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{ try { ja.paste(); }catch(Exception ex) { ex.printStackTrace(); } } } );
//剪切菜单项监听器
cut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) { try { ja.cut(); } Catch(Exception ex) { ex.printStackTrace(); } } });
selectall.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { ja.selectAll(); } });
//关于监听器
about.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{jfm.setLocationRelativeTo(NewProgram.this); jb.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e) { jfm.setVisible(false); } }); } });
//状态栏菜单监听器
lookup.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{ if (a==1) {lb.setVisible(false); a=0; } else if (a==0)
{ NewProgram.this.add(lb, BorderLayout.SOUTH); lb.setVisible(true);
lb.setText("当前字数: "+String.valueOf(ja.getText().trim().length())+" "+"当前行数:
"+String.valueOf(ja.getLineCount())); a=1; } } });
//添加滚动条
JScrollPane jsp = new JScrollPane(ja); Container c = this.getContentPane(); c.add(jsp);
jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEE DED);
jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); this.setVisible(true); }}
实验问题:
1、使用布局设计登录界面,要求输入用户名和密码正确才能登陆,否则则不能。
将写字板显示的语句为:new NewProgram().setVisible(true);setVisible(false);因为NewProgram.Java文件代码中,用了构造方法,可以直接调用。
2、该写字板实现的功能的结构如下:
(1)、文件菜单:①新建事件,②打开事件,③保存,④另存为,⑤退出(有快捷键)(2)编辑菜单:①复制;②剪切;③粘贴;④删除; ⑤全选;(有快捷键)
(3)格式菜单①自动换行:②字体和字体颜色:
(4)查看菜单:①状态栏:
(5)帮助菜单:①关于;
3、本实验中主要用到监听器addActionListener()和addDocumentListener(),addXXXlistener()中的XXX表示监听器所监听的事件类型,通过观察“addXXXlistener”方法的名称就可以很容易知道其能够处理的事件类型,要是把监听事件的类型搞错了再编译时就会出错。
五、实验体会:
1、熟悉了swing的用法
2、清楚了Java面向对象
3、明确了学习的目的。