Java上路20

GraphicalUser Interface:图形用户接口。AWT:抽象窗口接口,调用系统方法实现;Swing:图形界面组件系统,Java自身实现。

一. AWT的继承关系:

二. 常用布局管理器:

FlowLayout(流布局)

从左到右的顺序排列,单个组件默认居中。Panel默认此布局

BorderLayout(边界布局)

东西南北中,当不指定方位时,默认最大化填充。Frame默认此布局

GridLayout(网格布局)

规则布局

GardLayout(卡片布局)

选项卡

GridBagLayout(网格包布局)

非规则矩阵

三. 界面创建流程:

1)创建容器

Window、Frame、Panel . . .

2)设置容器属性

宽、高、位置、颜色、布局、可见 . . .

3)添加组件

4)添加事件监听

事件源、事件、监听器、处理办法 . . .

1. 示例:

import java.awt.*;import java.awt.event.*; class AwtDemo{       public static void main(String[] args)       {              //--------------------------------------------1              //顶层容器:框架              Frame f=new Frame("FirstAWT");              //--------------------------------------------2              f.setSize(400, 300);     //大小              f.setLocation(300, 200);     //位置              f.setVisible(true);  //可见               //Frame默认是边界布局,改为流布局              f.setLayout(new FlowLayout());               //--------------------------------------------3              Button b=new Button("This isa button");              f.add(b); //在框架上添加按钮               //--------------------------------------------4              f.addWindowListener(newMyEvent());       }} //窗口关闭处理class MyEvent extends WindowAdapter{       public void windowClosing(WindowEvent e)       {              System.out.println(e.toString());              System.exit(0);       }}

2. 界面与事件分离:

import java.awt.*;import java.awt.event.*; class AwtDemo{       private Frame f;       private Button b;        AwtDemo()       {              init();      //创建界面              event();  //添加事件处理       }        public void init()       {              f=new Frame("FirstAWT");              f.setSize(400, 300);              f.setLocation(300, 200);              f.setLayout(new FlowLayout());              f.setVisible(true);               b=new Button("This is a exitbutton");              f.add(b);       }        public void event()       {              f.addWindowListener(new WindowAdapter()   //窗体事件监听              {                     public void windowClosing(WindowEvent e)                     {                            System.out.println(e.toString());                            System.exit(0);                     }              });               b.addActionListener(new ActionListener()       //动作事件监听              {                     public void actionPerformed(ActionEvent e)                     {                            System.out.println("点击按钮退出");                            System.exit(0);                     }              });       }        public static void main(String[] args)       {              new AwtDemo();       }}

四. 按钮事件:

import java.awt.*;import java.awt.event.*; class AwtDemo{       private Frame f;       private Button b;        AwtDemo()       {              init();       }        public void init()       {              f=new Frame("FirstAWT");              f.setSize(400, 300);              f.setLocation(300, 200);              f.setVisible(true);              f.setLayout(new FlowLayout());              b=new Button("This is a exitbutton");              f.add(b);              event();       }        public void event()       {              f.addWindowListener(new WindowAdapter()              {                     public void windowClosing(WindowEvente)                     {                            System.exit(0);                     }              });               //动作(状态)触发事件              b.addActionListener(new ActionListener()              {                     public void actionPerformed(ActionEvent e)                     {                            System.out.println("按钮被触发动作"+e.toString());                     }              });               //鼠标触发事件              b.addMouseListener(new MouseAdapter()              {                     public void mouseClicked(MouseEvent e)                     {                            System.out.println("鼠标点击:"+e.toString());                            if(e.getClickCount()==2)                            {                                   System.out.println("双击事件");                            }                            if(e.getClickCount()==3)                            {                                   System.out.println("三击事件");                            }                     }                      public voidmouseEntered(MouseEvent e)                     {                            //System.out.println("鼠标移到:"+e.toString());                     }              });               //键盘触发事件              b.addKeyListener(new KeyAdapter()              {                     public void keyPressed(KeyEvent e)                     {                            System.out.println("按下键:"+e.getKeyChar()+",对应ASCII码:"+e.getKeyCode()+",字符串表示:"+KeyEvent.getKeyText(e.getKeyCode()));                             if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)                            {                                   System.out.println("ctrlis down , and enter is down.");                            }                     }              });       }        public static void main(String[] args)       {              new AwtDemo();       }}

五. 事件处理示例:


六. 我的记事本:

import java.awt.*;import java.awt.event.*;import java.io.*;class AwtDemo {private File file;//文件操作类private FileDialog fileDialogSave;//文件选择对话框-保存private FileDialog fileDialogOpen;//文件选择对话框-打开private Frame frame;//窗体private Menu menuEdit;//菜单-编辑private Menu menuFile;//菜单-文件private Menu menuNew;//子菜单-新建private MenuBar menuBar;//菜单栏private MenuItem menuItemExit;//菜单项-退出private MenuItem menuItemCpp;//菜单项-Cppprivate MenuItem menuItemJava;//菜单项-Javaprivate MenuItem menuItemOpen;//菜单项-打开private MenuItem menuItemSave;//菜单项-保存private TextArea textArea;//文本域AwtDemo(){init();//初始化}public void init(){//菜单项menuItemExit=new MenuItem(" 退 出 ");menuItemCpp=new MenuItem("C++");menuItemJava=new MenuItem("Java");menuItemOpen=new MenuItem(" 打 开 ");menuItemSave=new MenuItem(" 保 存 ");//子菜单menuNew=new Menu(" 新 建 ");menuNew.add(menuItemCpp);menuNew.add(menuItemJava);//菜单menuFile=new Menu(" 文 件 ");menuFile.add(menuItemOpen);menuFile.add(menuItemSave);menuFile.add(menuNew);menuFile.add(menuItemExit);//菜单menuEdit=new Menu(" 编 辑 ");//菜单栏menuBar=new MenuBar();menuBar.add(menuFile);menuBar.add(menuEdit);//文本域textArea=new TextArea();//窗体frame=new Frame("我的记事本");frame.setBounds(200, 100, 600, 500);//x,y,w,h//frame.setLayout(new FlowLayout());//默认边界布局,TextArea随窗体大小填充//添加菜单栏frame.setMenuBar(menuBar);frame.add(textArea);//文件选择窗口fileDialogSave=new FileDialog(frame, "我要保存", FileDialog.SAVE);fileDialogOpen=new FileDialog(frame, "我要打开", FileDialog.LOAD);//事件处理event();frame.setVisible(true);}public void event(){frame.addWindowListener(new WindowAdapter()//窗体退出事件{public void windowClosing(WindowEvent e){System.exit(0);}});menuItemOpen.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){fileDialogOpen.setVisible(true);String filePath=fileDialogOpen.getDirectory();String fileName=fileDialogOpen.getFile();if(filePath==null || fileName==null)return;textArea.setText("");File file=new File(filePath, fileName);try{BufferedReader bufr=new BufferedReader(new FileReader(file));String line=null;while ((line=bufr.readLine())!=null){textArea.append(line+"\r\n");}bufr.close();}catch (IOException ioe){throw new RuntimeException("读取失败");}}});menuItemSave.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if (file==null){fileDialogSave.setVisible(true);String filePath=fileDialogSave.getDirectory();String fileName=fileDialogSave.getFile();if (filePath==null || fileName==null)return;file=new File(filePath, fileName);}try{BufferedWriter bufw=new BufferedWriter(new FileWriter(file));String text=textArea.getText();bufw.write(text);bufw.close();}catch (IOException ioe){throw new RuntimeException();}}});menuItemExit.addActionListener(new ActionListener()//退出菜单触发事件{public void actionPerformed(ActionEvent e){System.exit(0);}});}public static void main(String[] args) {new AwtDemo();}}

七.Swing:

Swing是纯Java组件,可在不同的平台上实现相同的外观和行为。组件都在javax.swing包中。

我的图片查看器示例:

import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.filechooser.FileNameExtensionFilter;class SwingDemo {private JFrame frame;//窗体private JMenuBar menuBar;//菜单栏private JMenu mnuFile;//文件菜单private JMenuItem mnuOpen;//打开项private JMenuItem mnuClose;//关闭项private JMenuItem mnuExit;//退出项private JMenu mnuEdit;//编辑菜单private JMenuItem mnuCopy;//复制项private JMenuItem mnuMove;//剪切项private JMenu mnuHelp;//帮助菜单private JMenu mnuContact;//联络private JMenuItem mnuWeb;//网站private JMenuItem mnuEmail;//邮箱private JMenuItem mnuAbout;//关于private JPanel panel;//菜单栏+工具栏private JToolBar toolBar;//工具栏private JButton btnOpen;//打开private JButton btnCopy;//复制private JFileChooser fileChooser;//文件选择器private JLabel label;//图片显示private JDialog dlgAbout;SwingDemo(){init();}public static void main(String[] args) {new SwingDemo();}/***初始化界面*/public void init(){mnuOpen=new JMenuItem(" 打 开 ...");//打开项mnuClose=new JMenuItem(" 关 闭 ");//关闭项mnuExit=new JMenuItem(" 退 出 ");//退出项mnuFile=new JMenu(" 文 件 ");//文件菜单mnuFile.add(mnuOpen);mnuFile.add(mnuClose);mnuFile.addSeparator();//分隔线mnuFile.add(mnuExit);mnuCopy=new JMenuItem(" 复 制 ");//复制项mnuMove=new JMenuItem(" 剪 切 ");//剪切项mnuEdit=new JMenu(" 编 辑 ");//编辑菜单mnuEdit.add(mnuCopy);mnuEdit.add(mnuMove);mnuWeb=new JMenuItem("网站");//网站mnuEmail=new JMenuItem("邮箱");//邮箱mnuContact=new JMenu("联系方式");//联络mnuContact.add(mnuWeb);mnuContact.add(mnuEmail);mnuAbout=new JMenuItem("关于本软件");//关于mnuHelp=new JMenu(" 帮 助 ");//帮助菜单mnuHelp.add(mnuContact);mnuHelp.add(mnuAbout);menuBar=new JMenuBar();//菜单栏menuBar.add(mnuFile);menuBar.add(mnuEdit);menuBar.add(mnuHelp);btnOpen=new JButton();//打开工具btnOpen.setIcon(new ImageIcon("e:/ico_o.png"));//图标btnOpen.setToolTipText("打开");//提示btnCopy=new JButton();//复制工具btnCopy.setIcon(new ImageIcon("e:/ico_c.png"));btnCopy.setToolTipText("复制");toolBar=new JToolBar();//工具栏toolBar.setFloatable(false);//锁定toolBar.add(btnOpen);toolBar.add(btnCopy);panel=new JPanel();//菜单栏和工具栏panel.setLayout(new BorderLayout());panel.add(menuBar, BorderLayout.NORTH);panel.add(toolBar);label=new JLabel();String title="我的图片查看器";//窗体标题frame=new JFrame(title);frame.setBounds(200, 100, 500, 450);//x,y,w,hframe.setLayout(new BorderLayout());frame.add(panel, BorderLayout.NORTH);frame.add(label, BorderLayout.CENTER);fileChooser=new JFileChooser();event();frame.setVisible(true);//显示窗体}/***事件处理*/public void event(){//窗体的关闭按钮frame.setDefaultCloseOperation(3);//"EXIT_ON_CLOSE",点击关闭按钮程序退出//文件菜单下的“打开”项mnuOpen.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){selectPic();}});//文件菜单下的“关闭”项mnuClose.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if (label.getIcon()!=null){label.setIcon(null);}}});//文件菜单下的“退出”项mnuExit.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});//帮助菜单下的“关于”项mnuAbout.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dlgAbout=new JDialog(frame, "关于“我的图片查看器”");dlgAbout.setBounds(300, 300, 350, 300); JLabel lblAbout=new JLabel("第一个SWing软件哦"); dlgAbout.add(lblAbout);dlgAbout.setVisible(true);}});//btnOpen.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){selectPic();}});}private void selectPic(){fileChooser.setFileFilter(new FileNameExtensionFilter("JPG文件", "jpg"));fileChooser.showOpenDialog(frame);File file=fileChooser.getSelectedFile();label.setIcon(new ImageIcon(file.toString()));//并非直接显示图片,而是作为图标}}

旁观者的姓名永远爬不到比赛的计分板上。

Java上路20

相关文章:

你感兴趣的文章:

标签云: