------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
< 今日心情 >放掉懒惰,再加上一份坚持
一、Awt和Swing
1、java.Awt:
Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。
属重量级控件。2、javax.Swing:
在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性。
属轻量级控件。
二、继承关系图
三、图形化界面示例
import java.awt.*; import java.awt.event.*; import java.io.*; class MyWindow { /* 创建图形化界面: 1.创建frame窗体 2.设置窗体布局,如位置大小、布局模式 3.定义组件 4.将组件添加到窗体中 5.设置窗体可见 */ private Frame wMain; private Panel mUp,mBotom; private TextField inputDir; private TextArea content; private Button btn; private Dialog erroyDialog; private Label erroyMessage; private Button erroyBtn_ok; private MenuBar fileMB; private Menu fileMenu; private MenuItem fmClose; private Menu fmOpen; private MenuItem[] fmOpenItem; private MenuItem save,saveAs; public MyWindow() { init(); } protected void init() { /* 1.创建一个fram窗体 窗体标题为:bigniu */ wMain=new Frame("bigniu"); /* 2.窗体进行布局 初始化位置为屏幕上的坐标:(300,200) 窗口的大小为:长495,宽400 单位均为像素 frame布局为流式布局,窗体内组件左对齐,窗体内组件间距横向20px,纵向25px */ wMain.setBounds(300,200,495,400); wMain.setLayout(new FlowLayout(FlowLayout.LEFT,20,25)); /* 3.添加组件 Container:容器,具有可以添加其他组件的特性。 Panel:画布,一般添加在frame中,可以添加其他组件并布局 Dialog:对话框 TextField:文本框 TextArea:文本区域 Button:按钮 Label:文本标签 */ inputDir=new TextField(40); content=new TextArea(15,60); btn=new Button("查询"); mUp=new Panel(new BorderLayout(10,10)); mUp.add(inputDir,BorderLayout.CENTER); mUp.add(btn,BorderLayout.EAST); mBotom=new Panel(new BorderLayout(10,10)); mBotom.add(content,BorderLayout.CENTER); erroyDialog=new Dialog(wMain,"错误",true); erroyDialog.setBounds(300,200,200,130); erroyDialog.setLayout(new BorderLayout(10,10)); erroyMessage=new Label(); Panel p=new Panel(new FlowLayout(FlowLayout.RIGHT,10,10)); erroyBtn_ok=new Button("确定"); p.add(erroyBtn_ok); erroyDialog.add(erroyMessage,BorderLayout.CENTER); erroyDialog.add(p,BorderLayout.SOUTH); /* MenuBar:菜单栏 通过frame的setMenuBar方法关联 Menu:菜单 MenuBar的Add方法可以为菜单栏添加菜单 Menu中Add方法添加的是Menu及其子类控件 MenuItem:选项,Menu的子类 */ fileMB=new MenuBar(); fileMenu=new Menu("文件"); fmClose=new MenuItem("关闭"); fmOpen=new Menu("打开"); fmOpenItem=new MenuItem[5]; for(int i=0;i<5;i++) { fmOpenItem[0]=new MenuItem("file"+i); fmOpen.add(fmOpenItem[0]); } save=new MenuItem("保存"); saveAs=new MenuItem("另存为"); fileMenu.add(fmOpen); fileMenu.add(save); fileMenu.add(saveAs); fileMenu.add(fmClose); fileMB.add(fileMenu); wMain.setMenuBar(fileMB); wMain.add(mUp); wMain.add(mBotom); addEvent(); /* 4、设置窗体可见 */ wMain.setVisible(true); } protected void btn_click() { if(inputDir.getText().length()==0) return; File dir=new File(inputDir.getText()); if(!dir.isDirectory()) { erroyMessage.setText("Dir:\""+inputDir.getText()+"\",不是一个有效的地址"); erroyDialog.setVisible(true); } else { content.setText(""); for(File f:dir.listFiles()) { content.append(f.getName()+"\r\n"); } } } protected void addEvent() { /* 事件监听机制: 1.事件源 2.事件 3.监听器 4.事件处理 1-3项有Java类库提供,已经封装好了只需调用即可,程序编写一般自作事件处理过程 */ /* 事件源:wMain(Frame组件)(已经封装好了添加监听器的方法) 监听器:WindowListener(WindowAdapter是它的一个实现类) 事件:WindowEvent 事件处理:windowClosing(在该方法中添加对关闭窗口事件的处理过程) */ wMain.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); erroyDialog.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { erroyDialog.setVisible(false); } }); erroyBtn_ok.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { erroyDialog.setVisible(false); } }); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { btn_click(); } }); inputDir.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { switch(e.getKeyCode()) { case KeyEvent.VK_ESCAPE : inputDir.setText(" "); break; case KeyEvent.VK_ENTER : btn_click(); break; } } }); } } class AwtDemo { public static void main(String[] args) { new MyWindow(); } }