Windows Phone 自定义弹出框和 Toast 通知


 

   工程源码下载

 

注:这篇文章主要介绍在 应用全局所有页面使用的自定义弹出框,如果仅在 MainPage 页面询问用户是否

是否退出,可参考: 简化版“询问用户是否退出”

 

1、 首先介绍如何自定义弹出框

    在 WP 中,系统默认的弹出框有几个问题,首先是背景比较简陋,而且样式的扩展性比较低,另一个问题就

是会阻碍 UI 线程。当在页面的调用下面的代码:

            if(MessageBoxResult.OK != MessageBox.Show("确定要退出吗?", "温馨提示", MessageBoxButton.OKCancel))
            {
                e.Cancel = true;
            }


当在 MainPage 页面点击 Back 键,会弹出:

 当在10秒钟的时候,如果用户没有回馈,那么应用就会被系统终结了。

        下面开始做一个自定义的弹出框:

1)自定义一个控件,定义在 MyDialog.xaml 文件中:

 <UserControl.Resources>
        <!--自定义 “确定/取消”弹出框 播放动画-->
        <Storyboard x:Name="ShowMessageBoxSB">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="gridBox">
                <EasingDoubleKeyFrame KeyTime="0" Value="-30"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>
    <Grid>
        
        <!--自定义 “确定/取消”弹出框,弹出框为蓝色,背景为半透明黑色-->
        <Grid  x:Name="gridDialog" Background="#33000000">
            <Grid Height="280" x:Name="gridBox" VerticalAlignment="Top" Background="#ff1ba0e1">
                <Grid.Projection>
                    <PlaneProjection/>
                </Grid.Projection>
                <Grid.RowDefinitions>
                    <RowDefinition Height="60"/>
                    <RowDefinition Height="150"/>
                    <RowDefinition Height="70"/>
                </Grid.RowDefinitions>
                <TextBlock Text="提示信息" x:Name="txtTitle" FontSize="25" Margin="25,10, 0, 0"/>

                <!-- ContentControl 可以设置成任何其他的 Element,因为它的 Content 属性是 Object 类型的-->
                <ContentControl HorizontalAlignment="Left" FontSize="30" Margin="40, 0, 0, 0" Content="文本内容文本" Grid.Row="1" x:Name="contentContainer"/>

                <StackPanel Grid.Row="2" Orientation="Horizontal">
                    <Button x:Name="btnOk" Content="OK" Width="200" Click="btnOk_Click"/>
                    <Button x:Name="btnCancle" Content="Cancel" Width="200" Click="btnCancle_Click"/>
                </StackPanel>
            </Grid>
        </Grid>
        
        <!--自定义 Toast 通知,背景颜色和手机主题一致-->
        <Border x:Name="borderToast" Height="50" Width="480" Margin="0,-50,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Background="{StaticResource PhoneAccentBrush}" RenderTransformOrigin="0.5,0.5">
            <Border.RenderTransform>
                <CompositeTransform/>
            </Border.RenderTransform>
            <TextBlock Margin="30,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="txtToast" FontSize="22"/>
        </Border>
    </Grid>
</UserControl>


  相应的 C# 页面:

 public MyDialog()
        {
            InitializeComponent();

            gridDialog.Visibility = System.Windows.Visibility.Collapsed;

            // 把第一个实例赋值给全局静态对象
            if (_instance == null)
                _instance = this;
        }

        #region “确定”弹出框
        //用来控制异步线程中 弹出框 结果返回的时机
        private static AutoResetEvent myResetEvent = new AutoResetEvent(false);

        static MessageBoxResult messageBoxResult;

        //用一个单一实例,使得应用中的所有页面使用同一个实例
        static MyDialog _instance;
        static MyDialog Instance
        {
            get
            {
                //if (_instance == null)
                //    _instance = new MyDialog();

                return _instance;
            }
        }

        // 用来控制当弹出框显示的时候,如果用户点击 Back 按键,则隐藏弹出框,
        // 在 App.xaml.cs 中的 RootFrame_Navigating 事件中调用
        public static bool DialogIsOpen
        {
            get
            {
                if (Instance != null && Instance.gridDialog.Visibility == Visibility.Visible)
                {
                    Instance.btnCancle_Click(null, null);

                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        /// <summary>
        /// 显示包含指定文本和“确定”按钮的消息框
        /// </summary>
        /// <param name="messageBoxText">要显示的消息</param>
        /// <returns> 在所有情况下均为 System.Windows.MessageBoxResult.OK</returns>
        public static Task<MessageBoxResult> Show(string messageBoxText)
        {
            return Task<MessageBoxResult>.Factory.StartNew(() =>
            {
                Instance.Dispatcher.BeginInvoke(delegate
                       {
                           Instance.gridDialog.Visibility = Visibility.Visible;

                           Instance.contentContainer.Content = messageBoxText;

                           Instance.txtTitle.Text = "";

                           Instance.btnCancle.Visibility = Visibility.Collapsed;


                           Instance.ShowMessageBoxSB.Stop();
                           Instance.ShowMessageBoxSB.Begin();
                       });

                myResetEvent.WaitOne();
                return messageBoxResult;
            });
        }

        /// <summary>
        /// 显示包含指定文本、标题栏标题和响应按钮的消息框
        /// </summary>
        /// <param name="messageBoxText">要显示的消息</param>
        /// <param name="caption">消息框的标题</param>
        /// <param name="button">一个值,用于指示要显示哪个按钮或哪些按钮</param>
        /// <returns>一个值,用于指示用户对消息的响应</returns>
        public static Task<MessageBoxResult> Show(string messageBoxText, string caption, MessageBoxButton button)
        {
            return Task<MessageBoxResult>.Factory.StartNew(() =>
            {
                Instance.Dispatcher.BeginInvoke(delegate
                       {

                           Instance.gridDialog.Visibility = Visibility.Visible;

                           Instance.contentContainer.Content = messageBoxText;

                           Instance.txtTitle.Text = caption;

                           if (button == MessageBoxButton.OKCancel)
                           {
                               Instance.btnCancle.Visibility = Visibility.Visible;
                           }
                           else
                           {
                               Instance.btnCancle.Visibility = Visibility.Collapsed;
                           }

                           //Instance.UpdateLayout();


                           Instance.ShowMessageBoxSB.Stop();
                           Instance.ShowMessageBoxSB.Begin();
                       });


                myResetEvent.WaitOne();

                return messageBoxResult;
            });
        }

        private void btnOk_Click(object sender, RoutedEventArgs e)
        {
            txtTitle.Text = "";
            contentContainer.Content = null;

            gridDialog.Visibility = System.Windows.Visibility.Collapsed;

            messageBoxResult = MessageBoxResult.OK;

            // 使异步线程的 Show() 方法继续执行
            myResetEvent.Set();
        }

        private void btnCancle_Click(object sender, RoutedEventArgs e)
        {
            txtTitle.Text = "";
            contentContainer.Content = null;

            gridDialog.Visibility = System.Windows.Visibility.Collapsed;

            messageBoxResult = MessageBoxResult.Cancel;

            myResetEvent.Set();
        }
        #endregion


     另一个问题就是,让这个自定义控件变成全局的,也就是所有工程里的页面,共享

      这一个实例。思路就是,因为 App 类中的一个 RootFrame 对象,它是 PhoneApplicationFrame 类型的

,它是用来显示工程内所有页面的对象,并且控制各个页面的导航等功能的,它有一个 Template 属性,只要在

默认的框架上,加入自定义的控件,那么这个控件就可以在所有页面中显示了,相应的样式(在 App.xaml 中定义):

复制代码
  <Style x:Key="MyPhoneApplicationFrameStyle" TargetType="phone:PhoneApplicationFrame">
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
            <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
            <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
            <Setter Property="HorizontalAlignment" Value="Stretch"/>
            <Setter Property="VerticalAlignment" Value="Stretch"/>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="BorderBrush" Value="{x:Null}"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="phone:PhoneApplicationFrame">
                        <Grid>
                            <Border x:Name="ClientArea" 
                                BorderBrush="{TemplateBinding BorderBrush}" 
                                BorderThickness="{TemplateBinding BorderThickness}" 
                                Background="{TemplateBinding Background}" 
                                HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
                                VerticalAlignment="{TemplateBinding VerticalAlignment}">
                                <ContentPresenter 
                                ContentTemplate="{TemplateBinding ContentTemplate}" 
                                Content="{TemplateBinding Content}" 
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                Margin="{TemplateBinding Padding}" 
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                            <Dia:MyDialog xmlns:Dia="clr-namespace:DialogTemplate" x:Name="myDialog"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
复制代码


在 App 的构造函数中,重新设置 RootFrame 的样式,为上面定义的样式:

   RootFrame.Style = App.Current.Resources["MyPhoneApplicationFrameStyle"] as Style;

 

在 App 的 InitializePhoneApplication() 方法中,注册 Navigating 事件:

  RootFrame.Navigating += RootFrame_Navigating;

相应的函数:

复制代码
   void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            // 如果自定义弹出框在显示,则隐藏它,并且取消导航
            if (MyDialog.DialogIsOpen && e.NavigationMode == NavigationMode.Back)
            {
                e.Cancel = true;
            }
        }
复制代码

 

 

在页面中调用弹出框的方法:

复制代码
       private async void Button_Click_OkAndCancel(object sender, RoutedEventArgs e)
        {
            if (MessageBoxResult.OK == await MyDialog.Show("Hello 北京天安门", "提示", MessageBoxButton.OKCancel))
            {
                txtTile.Text = "点击了OK";
            }
            else
            {
                txtTile.Text = "点击了Cancle";
            }
        }
复制代码


显示结果:

 

当用户在 MainPage 页面,点击 Back 物理按键时,因为此时不会触发 RootFrame.Navigating 的导航事件,所以

需要在 MainPage 中判断一下是否有其它的弹出框,判断如果没有其它的弹出框,则弹出询问用户

是否关闭当前应用的弹出框:

复制代码
        protected override async void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            // 首先取消默认 Back 键关闭应用
            e.Cancel = true;

            // 如果 MainPage 页面中,弹出了其它的弹出框,关闭它,
            // 在 DialogIsOpen 属性中实现
            if (MyDialog.DialogIsOpen)
            {
                //可以做其它事情
            }
            else
            {
                if (MessageBoxResult.OK == await MyDialog.Show("确定要退出吗?", "温馨提示:", MessageBoxButton.OKCancel))
                {
                    //  终止当前应用程序。该方法是在 WP8 中加入的,WP7 中木有
                    App.Current.Terminate();
                }
            }
            base.OnBackKeyPress(e);
        }
复制代码


显示效果:

因为本工程中自定义弹出框和 自定义Toast 通知都为系统级别的,所以所有的页面共享这个

单一实例。如果页面只有在推出时,询问用户 “是否退出应用” 则只需要参考自定义控件,把它

简化后,添加到 MainPage 中使用即可,不需要放到 PhoneApplicationFrame 的 Template

属性中。

 

2) 自定义一个 Toast 通知,目的是增加对消息样式的控制,并且可以增加消息弹出的动画等。

      自定义的 Toast 显示框已经在 上面的 MyDialog.xaml 文件中定义了,下面定义 C# 页面:

复制代码
  #region 自定义 Toast 消息框
        const string myToast = @" <Storyboard xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=""(UIElement.RenderTransform).(CompositeTransform.TranslateY)"">
                    <EasingDoubleKeyFrame KeyTime=""0"" Value=""0""/>
                    <EasingDoubleKeyFrame KeyTime=""0:0:2"" Value=""50"">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <ExponentialEase EasingMode=""EaseOut"" Exponent=""6""/>     
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                    <EasingDoubleKeyFrame KeyTime=""0:0:5"" Value=""-50""/>
                    <EasingDoubleKeyFrame KeyTime=""0:0:6"" Value=""0"">
                        <EasingDoubleKeyFrame.EasingFunction>
                           <ExponentialEase EasingMode=""EaseInOut"" Exponent=""6""/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=""(UIElement.Opacity)"">
                    <EasingDoubleKeyFrame KeyTime=""0"" Value=""0""/>
                    <EasingDoubleKeyFrame KeyTime=""0:0:2"" Value=""1""/>
                    <EasingDoubleKeyFrame KeyTime=""0:0:5"" Value=""1""/>
                    <EasingDoubleKeyFrame KeyTime=""0:0:6"" Value=""0"">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <ExponentialEase EasingMode=""EaseIn"" Exponent=""6""/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>";

        // 把上面动画字符串转换成相应的 XAML 动画对象
        Storyboard StoryBoardToast = System.Windows.Markup.XamlReader.Load(myToast) as Storyboard;

        // 显示自定义 Toast 消息
        public static void ShowToastMessage(string message)
        {
            Instance.StoryBoardToast.Stop();

            Instance.txtToast.Text = message;


            foreach (var t in Instance.StoryBoardToast.Children)
                Storyboard.SetTarget(t, Instance.borderToast);

            Instance.StoryBoardToast.Begin();
        }
        #endregion
复制代码


在任何一个 Page 页面中调用:

  private void Button_Click_Toast(object sender, RoutedEventArgs e)
        {
            MyDialog.ShowToastMessage("收到 10 条新消息");
        }

 

则,显示结果:


转自:http://www.cnblogs.com/hebeiDGL/archive/2013/05/26/3099861.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值