毕向东之图形化界面GUI
/*GUI(图形用户接口):用图形的方式来显示计算机操作的界面 java为GUI提供的对象都存在java.Awt和java.Swing两个包中 Awt(Abstract Window ToolKit):抽象窗口工具包,不能跨平台,对系统依赖性强 Swing:完全由java实现,增强了移植性能跨平台 组件包括:Button(按钮),Label(标签,放置文本的组件),Checkbooks(复选框),TextComponent(文本组件):(TextArea(文本区域),TextField(文本框)) 部分体系: Component(组件) |--Container:容器,一个特殊的组件,可以用add方法添加其他组件进来 |--Panel(面板) |--Window(窗口) |--Frame(框架) |--Dialog(对话框) |--FileDialog 容器中的组件的排序方式就是布局,常见的布局方式有: FlowLayout(流式布局管理器):从左至右的顺序排列,Panel默认的布局方式 BorderLayout(边界布局管理器):东南西北中,Frame默认的布局方式 GridLayout(网格布局管理器):规则的矩阵 CardLayout(卡片布局管理器):选项卡 GridBagLayout(网络包布局管理器):非规则的矩阵 ========================================== 创建图形化界面的步骤: 1.创建Frame窗体 2.对窗体进行基本的设置:如大小,位置,布局 3.定义组件 4.将组件通过窗体的add方法添加到窗体中 5.让窗体显示,通过setVisible(true); */ import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Test1 { public static void main(String[] args) { Frame f=new Frame("我的框架");//框架名 f.setSize(400, 300);//设置框架的长宽 f.setLocation(300,200);//位置,改变起点的坐标,默认左上角 f.setLayout(new FlowLayout());//设置组件的布局方式 Button b=new Button("按钮上的字"); f.add(b);//将按钮添加到框架中 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("关闭"); System.exit(0); }//添加一个监听器,使窗口能关闭 });//使用了匿名内部类 f.setVisible(true);//设置看得见的,让框架显示 } }
/*因为WindowListener为接口,实例化需要复写它的很多方法, 所以在关闭窗口new的对象为它的子类,该类内部已经复写了这个接口的方法, 当需要关闭操作时只需要复写关闭方法,一般有三个方法 以上的都new其子类适配器 */ import java.awt.*; import java.awt.event.*; public class Test2 { public static void main(String[] args) { Frame f=new Frame("java"); f.setSize(500, 400); f.setLocation(300,300); Button b=new Button("按钮"); TextField tf=new TextField(20);//文本框 f.setLayout(new FlowLayout()); f.add(tf); f.add(b); f.addWindowListener(new WindowAdapter(){//窗口监听器 public void windowClosing(WindowEvent e){ System.exit(0); } });//WindowAdapter为WindowListener的子类 b.addActionListener(new ActionListener(){//活动监听器 public void actionPerformed(ActionEvent e){ System.out.println("按钮活动"); } }); b.addMouseListener(new MouseAdapter(){//鼠标监听器 int count=1; public void mouseClicked(MouseEvent e){ if(e.getClickCount()==2) System.out.println("双击"); else System.out.println("单击"+count); } public void mouseEntered(MouseEvent e){ System.out.println("鼠标进入到按钮上"+count++); } }); b.addKeyListener(new KeyAdapter(){//键盘监听器 public void keyPressed(KeyEvent e){ if(e.isShiftDown() && KeyEvent.VK_ENTER==e.getKeyCode()) System.out.println("按下了Shift+回车键");//组合键的使用 else{ System.out.println(KeyEvent.getKeyText(e.getKeyCode())); }//将按下的键以字符串的形式输出 } }); tf.addKeyListener(new KeyAdapter(){//文本框添加键盘监听器 public void keyPressed(KeyEvent e){ int code=(int)e.getKeyChar(); if(!(code<=KeyEvent.VK_9 && code>=KeyEvent.VK_0)){ System.out.println(e.getKeyChar()+"是非法的"); e.consume();//让非法的不写到文本框里去,取消默认操作 } } }); f.setVisible(true); } }
/*需要:在文本框里写入目录,点击转到按钮,将该目录中的文件与文件夹名称列在下面的文本区域中(搜索功能) */ import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class Test3 { public static void main(String[] args) { Frame f=new Frame("名称"); f.setSize(400, 300); f.setLocation(200, 100); f.setLayout(new FlowLayout()); TextField tf=new TextField(20);//文本区域 TextArea ta=new TextArea(20, 40); Button but=new Button("转到"); f.add(tf); f.add(but); f.add(ta); //错误提示对话框 Dialog d=new Dialog(f,"错误提示",true);//true代表弹出对话框时不能点击其他窗口 d.setBounds(300, 150, 250, 150);//位置和大小的设置 d.setLayout(new FlowLayout()); Button diaBut=new Button("确定"); Label lab=new Label();//放置文本的组件,一个标签只显示一行只读文本 d.add(lab); d.add(diaBut); //设置关闭 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //按钮的处理动作:把要找到文件打印到文本区域中 but.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){//单击 String str=tf.getText();//获取文本框里的内容 tf.setText("");//清空文本框 ta.setText("");//这样可以清空文本区之前显示的 File f=new File(str); if(f.exists()&&f.isDirectory()){//存在且是目录 for(File file:f.listFiles()){ ta.append(file.toString()+"\n");//将内容追加到文本区 } }else{//不存在则给出错误提示 lab.setText("输入的路径:"+str+"错误"); d.setVisible(true); } } }); //点击确定后退出对话框 diaBut.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ d.setVisible(false);//隐藏对话框 } }); f.setVisible(true); } }
/*菜单条由菜单组成,菜单里面有菜单项(MenuItem) MenuBar->Menu->MenuItem */ import java.awt.*; import java.awt.event.*; import java.io.*; public class Test4 { public static File file=null; public static void main(String[] args) { Frame f=new Frame("框架名"); f.setBounds(200, 100, 500, 600); f.setLayout(new BorderLayout());//边界布局方式 TextArea ta=new TextArea();//不定大小,因为是边界布局所以全屏 f.add(ta); MenuBar mb=new MenuBar();//菜单条 f.setMenuBar(mb); Menu m=new Menu("文件");//菜单 Menu subMenu=new Menu("新建");//菜单 MenuItem openMitem=new MenuItem("打开"); MenuItem saveMitem=new MenuItem("保存"); MenuItem subMenu_sub=new MenuItem("java工程");//菜单项 MenuItem closeItem=new MenuItem("退出");//菜单项 mb.add(m); m.add(subMenu);//菜单里面添加菜单 subMenu.add(subMenu_sub); m.add(openMitem); m.add(saveMitem); m.add(closeItem);//菜单里面添加菜单项 FileDialog fd=new FileDialog(f,"打开",FileDialog.LOAD ); FileDialog fdsave=new FileDialog(f,"保存",FileDialog.SAVE ); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);//活动监听,f发生操作时就执行 } }); closeItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); openMitem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ fd.setVisible(true);//让加载对话框显示 BufferedReader bufr=null; try{ if(fd.getDirectory()==null || fd.getFile()==null) return;//当为空时,取消时不执行任何操作,避免异常的发生 file=new File(fd.getDirectory()+fd.getFile()); bufr=new BufferedReader(new FileReader(file)); String line; ta.setText(null);//清空文本区域 while((line=bufr.readLine())!=null){ ta.append(line+"\n"); } }catch(IOException ioe){ System.exit(0); }finally{ if(bufr!=null){ try{ bufr.close(); }catch(IOException ioe){ System.exit(0); } } } } }); saveMitem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(file==null){//空就显示出来,可以选择性的保存到指定位置 fdsave.setVisible(true); } file=new File(fdsave.getDirectory()+fdsave.getFile()); BufferedWriter bufw; try{ bufw=new BufferedWriter(new FileWriter(file)); String s=ta.getText(); bufw.write(s); bufw.close(); }catch(IOException ioe){ throw new RuntimeException(); } } }); f.setVisible(true); } }