黑马程序员---GUI编程

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

GUI编程学习总结:

1.GUI即图形用户接口,是创建可视化程序的编程,GUI编程的核心是组件,组件的核心是事件监听器。

2.一个组件就是一个javabean,只不过这个JavaBean很复杂,因为是javabean,所以组件里的想暴露给IDE的

方法都是符合JavaBean命名规范的,即以get或set开头,其他的不想暴露给IDE的方法不必遵循javabean命名

规范,这些方法通过IDE也是不可操作的。

3.在Java中与GUI编程相关的类都在java.swing和java.awt两个包中,swing是awt的升级版,因为在awt中,很多

组件该有的特性都支持的不怎么好,组件数量也比较少,而且无法跨平台,swing封装了大量的组件,支持更加

灵活的布局。

以下为awt和swing组件对比:

 1.awt中的组件:

Object
    CheckboxGroup
    *Component
        Button
        Canvas
        CheckBox
        Choice
        Container
            Panel
                Applet
            ScrollPane
            Window
                Dialog
                Frame
        Label
        List
        TextComponent
            TextArea
            TextField
    MenuComponent
        MenuItem
            CheckboxMenuItem
            Menu
                PopupMenu

2.swing中的组件:

Object
    *Component
        Container
            *JComponent
                *AbstractButton
                    JButton
                    JMenuItem
                        JCheckBonMenuItem
                        JMenu
                        JRadioButonMenuItem
                    *JToggleButton
                        JCheckBox
                        JRadioButton
                Box 
                Filler
                JColorChooser
                JComboBox
                JDesktopIcon
                JFileChooser
                JInternalFrame
                JLabel
                JLayeredPane
                    JDesktopPane
                JList
                JMenuBar
                JOptionPane
                JPanel
                JPopupMenu
                JProgressBar
                JRootPane
                JScrollBar
                JScrollPane
                JSeparator
                JSlider
                JSplitPane
                JTabbedPane
                JTable
                JTableHeader
                *JTextComponent
                    JEditorPane
                        FrameEditorPane
                        JTextPane
                    JTextArea
                    JtextField
                        JPasswordField
                JToolBar
                JToolTip
                JTree
                JViewport
                    ScrollableTabViewport
            Panel
                Applet
                    JApplet
            Window
                Dialog
                    JDialog
                Frame
                    JFrame
                JWindow

可以看到,swing组件比awt要多的多。

awt和swing布局管理器对比:

1.awt中的布局管理器,其中带星号为接口:

*LayoutManager
    FlowLayout
    GridLayout
    *LayoutManager2
        BorderLayout
        CardLayout
        GridBagLayout
2.swing中的布局管理器:

*LayoutManager
    CenterLayout
    *LayoutManager2
        BoxLayout
        OverlayLayout
        SpringLayout

可以看到,swing重新定义了布局管理器,但只是有些名字变了,其布局思想是不变的。

4.awt类库是线程安全的,而swing则不是,因为awt是线程安全的,因此他要做更多的工作,因此运行效率较swing

要低。

5.awt和swing中的事件驱动模型:

  1.awt和swing中的组件都能接收到事件,并且能对事件作出响应,究竟作出何种响应,要看我们给其注册的监听函数。

  2.awt中支持的事件列表,其中每一种事件都对应一个事件监听器,抽象事件除外:

Object
    EventObject
        AWTEvent
            ActionEvent
            AdjustmentEvent
            ComponentEvent
                ContainerEvent
                FocusEvent
                InputEvent
                    KeyEvent
                    MouseEvent
                        MouseWheelEvent
                PaintEvent
                WindowEvent
            HierarchyEvent
            InputMethodEvent
            InvocationEvent
            ItemEvent
            TextEvent


3.swing中支持的事件列表:

Object
    EventObject
        AWTEvent
            AncestorEvent
            ComponentEvent
                InputEvent
                    KeyEvent
                        MenuKeyEvent
                    MouseEvent
                        MenuDragMouseEvent
            InternalFrameEvent


以下是关于GUI编程的一些简单示例:

1.创建一个简单窗体:

//通过awt类库创建一个简单窗体

public class AWindow extends Frame{
    
  public AWindow(){
      setSize(100,100);//设置窗体大小
      setVisiable(true);//设置窗体可见
  }   
  public static  void main(String[]args){
      new AWindow();//创建窗体
  }
}

//通过swing类库创建一个简单窗体

public class SWindow extends JFrame{
    
    public SWindow(){
        setSize(100,100);//设置窗体大小
        setVisiable(true);//设置窗体可见
    }
    
    public static void main(String[]args){
        new SWindow();//创建窗体
    }
}
 

2.给窗体添加一些组件,并组册一些事件监听函数:

/**
 * 组件创建以后并没有和窗体关联一起,需要我们手动的把组件
 * 添加到窗体中,其实,窗体就是一个容器,同样,组件创建之后
 * 并没有默认的事件监听函数,需要我们为其注册监听函数,不同
 * 的事件对应于不同的监听函数,跟组件的类型无关,不过,有的组件
 * 是不支持有些事件的,一般的,像鼠标键盘事件基本上所有的组件都是
 * 支持的,而他们的事件处理函数也基本上差不多
 */
public class EventDemo extends JFrame{
    
    public EventDemo(){
        JButton button=new JButton("事件演示");
        button.addActionListener(new ActionListener(){//注册监听器
            public void actionPerformed(ActionEvent e) { //事件处理函数
                JButton b=(JButton)e.getResource();//获得事件源对象
                b.setText("你点击了我");//事件处理
            }
            
        });
        add(button);//将按钮添加进窗体中
        setSize(100,100);//设置窗体大小
        setVisiable(true);//设置窗体可见
    }
}
 
3.布局管理器的使用:

/**
 * 布局管理器大同小异,明白了一个,其他的也就明白了,首先
 * JFrame是有默认的布局管理器的,当未设置布局管理器时,默认
 * 的是流水布局管理器,同时流水布局也是用的最多的布局,也是最简单
 * 的布局,对于复杂的界面布局,可以综合使用不同的布局,还可以
 * 使用容器,JFrame本身就是容器,而且,布局管理器也只能作用于容器,
 * 常用的容器是JPanel,容器是不可见的,一个容器只能应用一种布局管理器
 * 一个容器内可以有多个容器。
 */
public class LayoutDemo extends JFrame{
    
    public LayoutDemo(){
        setSize(100,100);//设置窗体大小
        setLayout(new FlowLayout());//设置布局管理器
        JButton button=null;
        for(int i=0;i<5;i++){//创建五个按钮用来演示流水布局
           button=new JButton(i+"");
           button.addActionListener(new ActionListener(){//事件监听器
               public void ActionListener(Event e){//事件处理函数
                   Jbutton b=(JButton)e.getResource();//获得事件源
                   b.setText("您点击了我");//对事件作出响应
               }
           });
           add(button);//将按钮添加进窗体
        }

        setVisiable(true);//setVisiable()必须是最后一步,否则他后面添加的组件不会生效
    }
}

 

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值