<目录>

1 创建一个简单的窗体

如何进行事件监听

  (1) 按钮监听

  (2) 键盘监听

  (3) 鼠标监听

3 容器

  (1) 创建一个简单的对话框

  (2) 创建一个简单的模态对话框

  (3) 使窗体大小不可变化

4 布局器

  (1) 绝对定位

  (2) FlowLayout(顺序布局器:容器上的组件水平摆放)

  (3) BorderLayout(边框布局器:容器上的组件按上北、下南、左西、右东、中的顺序摆放)

  (4) GridLayout(网格布局器:容器上的组件按网格区域摆放)

  (5) setPreferredSize(使用布局器的时候,改变组件显示大小,仅部分有效)

  (6) CardLayout

5 组件

  (1) 标签

  (2) 使用JLabel显示图片

  (3) 按钮

  (4) 复选框

  (5) 单选框

  (6) 按钮组

  (7) 下拉框

  (8) 对话框

  (9) 文本框

  (10) 密码框

  (11) 文本域

  (12) 进度条

  (13) 文件选择器

6 面板

  (1) 基本面板

  (2) ContentPane

  (3) SplitPanel

  (4) JScrollPanel

  (5) TabbedPanel

  (6) CardLayerout

7 菜单

  (1) 菜单栏和菜单

  (2) 菜单项

8 工具栏

  (1) 工具栏

  (2) 给按钮设置提示信息

  (3) 禁止工具栏拖动

9 表格

  (1) 基本表格

  (2) JScrollPane

  (3) 列宽

  (4) TableModel

  (5) 进一步理解TableModel

  (6) TableModel与DAO结合

  (7) TableSelectionModel

  (8) 更新Table

  (9) 输入项验证

  (10) 选中指定行

10 日期控件

  (1) DatePicker

  (2) JXDatePicker

11 Swing中的线程

  (1) 三种线程

  (2) 事件调度线程是单线程的

  (3) 初始化线程

  (4) 事件调度线程

  (5) 长耗时任务线程

12 皮肤


<正文内容>

<创建一个简单的窗体>

package practice;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");  //主窗体,括号里面是标题
        f.setSize(400,300);                  //主窗体设置大小,宽400高300
        f.setLocation(200, 200);             //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
        f.setLayout(null);                   //主窗体中的组件设置为绝对定位

        JButton b=new JButton("Kannyi的按钮");//按钮组件,还没设置功能
        b.setBounds(50,50,280,30);           //同时设置组件的位置和大小
        f.add(b);                            //把按钮加入到主窗体中

        //关闭窗体时,退出程序,不关会越来越卡
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //让窗体可见
        f.setVisible(true);
    }
}

界面如下:

<如何进行事件监听>

(1)按钮监听

package practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题
        f.setSize(400,300);                 //主窗体设置大小,宽400高300
        f.setLocation(580,200);             //主窗体设置位置,距离(屏幕左侧200,屏幕上方200)
        f.setLayout(null);                  //主窗体中的组件设置为绝对定位

        //标签,用于显示信息,比如文本或图像
        JLabel l1=new JLabel();
        //获取图像
        ImageIcon i=new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        //设置指定的图像到标签中
        l1.setIcon(i);
        //设置标签的位置和大小
        l1.setBounds(50,50,i.getIconWidth(),i.getIconHeight());

        JLabel l2=new JLabel();
        l2.setText("Kannyi的文本");          //设置指定的文本到标签中
        l2.setBounds(30, 30, 80, 12);       //设置标签的位置和大小,高度太高排版会出问题,12正好

        JButton b=new JButton("隐藏图片");    //按钮组件
        b.setBounds(250,200,100,30);

        //给按钮增加监听
        //写法1
        /*----------------------------------------------
        b.addActionListener(new ActionListener(){
            //当按钮被点击时,actionPerformed方法就会被执行
            //就会触发ActionEvent事件
            public void actionPerformed(ActionEvent e) {
                l.setVisible(false);
            }
        });
        -----------------------------------------------*/
        //写法2
        b.addActionListener(e->l1.setVisible(false));

        f.add(b);
        f.add(l1);
        f.add(l2);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(2)键盘监听

package practice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(580, 200);
        f.setLayout(null);

        JLabel l = new JLabel();
        ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        l.setIcon(i);
        l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight());

        //增加键盘监听
        f.addKeyListener(new KeyListener() {
            //键被弹起
            public void keyReleased(KeyEvent e) {
                //左键37 上键38 右键39 下键40
                /*
                可用下面这个函数知道键位的Code
                System.out.println(e.getKeyCode());
                */

                if (e.getKeyCode() == 37) {
                    //图片向左移动 (x坐标减少,y坐标不变)
                    l.setLocation(l.getX() -10, l.getY());
                }
                if (e.getKeyCode() == 38) {
                    //图片向上移动 (x坐标不变,y坐标减少)
                    l.setLocation(l.getX(), l.getY() - 10);
                }
                if (e.getKeyCode() == 39) {
                    //图片向右移动 (x坐标增加,y坐标不变)
                    l.setLocation(l.getX() + 10, l.getY());
                }
                if (e.getKeyCode() == 40) {
                    //图片向下移动 (x坐标不变,y坐标增加)
                    l.setLocation(l.getX(), l.getY() + 10);
                }
            }

            //键被按下,可以实现连续运动
            //之前被定义过的键位就不能用了
            public void keyPressed(KeyEvent e) {

            }

            // 一个按下弹起的组合动作
            //不会用!!!
            public void keyTyped(KeyEvent e) {

            }
        });

        f.add(l);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下(看不出什么特别,因为要用键盘实现上下左右操作):

(3)鼠标监听

package practice;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setLayout(null);
        f.setSize(500, 400);
        f.setLocationRelativeTo(null);               //设置窗体在屏幕正中央

        JLabel l = new JLabel();
        ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png");
        l.setIcon(i);
        l.setBounds(150, 100, i.getIconWidth(), i.getIconHeight());

        /*
        //鼠标监听-方法1
        //这种方法的缺点在于每个方法都要写出来,很麻烦
        l.addMouseListener(new MouseListener() {
            //释放鼠标
            public void mouseReleased(MouseEvent e) {

            }

            //按下鼠标
            public void mousePressed(MouseEvent e) {

            }

            //鼠标退出
            public void mouseExited(MouseEvent e) {

            }

            //鼠标进入
            public void mouseEntered(MouseEvent e) {
                //Random r.nextInt(int n)可以随机生成一个[0,n)的区间
                Random r = new Random();
                //下面的相减操作是防止图片随机到窗体外
                int x = r.nextInt(f.getWidth() - l.getWidth());
                int y = r.nextInt(f.getHeight() - l.getHeight());
                l.setLocation(x, y);
            }

            //按下释放组合动作为点击鼠标
            public void mouseClicked(MouseEvent e) {

            }
        });
         */

        //鼠标监听-方法2
        //用适配器,只需要重写用到的方法即可,较为方便
        l.addMouseListener(new MouseAdapter() {
            //只有mouseEnter用到了
            public void mouseEntered(MouseEvent e) {
                Random r=new Random();
                int x=r.nextInt(f.getWidth()-l.getWidth());
                int y=r.nextInt(f.getHeight()-l.getHeight());
                l.setLocation(x, y);
            }
        });

        f.add(l);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下(看不出什么特别,因为要用鼠标实现操作):

<容器>

(1)创建一个简单的对话框

package practice;

import javax.swing.JButton;
import javax.swing.JDialog;

public class Test {
    public static void main(String[] args) {
        JDialog d=new JDialog();             //对话框
        d.setTitle("Kannyi的对话框");         //设置对话框的标题
        d.setSize(400,300);
        d.setLocation(200,200);
        d.setLayout(null);

        JButton b=new JButton("kannyi的按钮");
        b.setBounds(50,50,280,30);

        d.add(b);

        d.setVisible(true);
    }
}

界面如下:

(2)创建一个简单的模态对话框(父窗体不能被激活,除非对话框关闭)

package practice;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的外部窗体");
        f.setSize(600, 500);
        f.setLocation(100, 100);

        JDialog d=new JDialog(f);   //根据外部窗体实例化JDialog
        d.setModal(true);           //设置为模态,其后的父窗体不能被激活,除非对话框关闭

        d.setTitle("Kannyi的模态对话框");
        d.setSize(400,300);
        d.setLocation(200,200);
        d.setLayout(null);

        JButton b=new JButton("Kannyi的按钮");
        b.setBounds(50,50,280,30);

        d.add(b);

        f.setVisible(true);
        d.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

界面如下:

(3)使窗体大小不可变化

package practice;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗口");
        f.setSize(400,300);
        f.setLocation(200, 200);
        f.setLayout(null);

        JButton b=new JButton("Kannyi的按钮");
        b.setBounds(50, 50, 280, 30);

        f.add(b);
        //窗体大小不可变化
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);
    }
}

界面如下:

<布局器>

(1)绝对定位

package practice;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200,200);
        //绝对定位:设置布局器为null,容器上的组件都需要指定位置和大小
        f.setLayout(null);

        JButton b1=new JButton("按钮1");
        b1.setBounds(50,50,70,30);
        JButton b2=new JButton("按钮2");
        b2.setBounds(150,50,80,30);
        //没有指定位置和大小,不会出现在容器上
        JButton b3=new JButton("按钮3");

        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);
    }
}

界面如下:

(2)FlowLayout

package practice;

import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200, 200);
        //设置布局器为FlowLayrout
        //容器上的组件水平摆放
        f.setLayout(new FlowLayout());

        JButton b1=new JButton("按钮1");
        JButton b2=new JButton("按钮2");
        JButton b3=new JButton("按钮3");

        //加入到容器,无需单独指定大小和位置
        f.add(b1);
        f.add(b2);
        f.add(b3);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(3)BorderLayout

package practice;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f=new JFrame("Kannyi的窗体");
        f.setSize(400,300);
        f.setLocation(200,200);
        //设置布局为BorderLayout
        //容器上的组件按照 上北 下南 左西 右东 的顺序摆放(可以自己设置)
        f.setLayout(new BorderLayout());

        JButton b1 = new JButton("按钮1");
        JButton b2 = new JButton("按钮2");
        JButton b3 = new JButton("按钮3");
        JButton b4 = new JButton("按钮4");
        JButton b5 = new JButton("按钮5");

        //加入到容器的时候,需要指定位置
        f.add(b1, BorderLayout.NORTH);
        f.add(b2, BorderLayout.SOUTH);
        f.add(b3, BorderLayout.WEST);
        f.add(b4, BorderLayout.EAST);
        f.add(b5, BorderLayout.CENTER);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(4)GridLayout

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        // 设置布局器为GridLayerout,即网格布局器
        // 该GridLayerout的构造方法表示该网格是2行3列
        f.setLayout(new GridLayout(2, 3));

        JButton b1 = new JButton("甲");
        JButton b2 = new JButton("乙");
        JButton b3 = new JButton("丙");
        JButton b4 = new JButton("丁");
        JButton b5 = new JButton("戊");

        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.add(b4);
        f.add(b5);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(5)setPreferredSize

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test {
    public static void main(String[] args) {

        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        f.setLayout(new FlowLayout());

        JButton b1 = new JButton("甲");
        JButton b2 = new JButton("乙");
        JButton b3 = new JButton("丙");

        // 即便使用布局器,也可以通过setPreferredSize,向布局器建议该组件显示的大小
        b3.setPreferredSize(new Dimension(180, 40));

        f.add(b1);
        f.add(b2);
        f.add(b3);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(6)CardLayout

界面如下:

<组件>

(1)标签

界面如下:

(2)使用JLabel显示图片

界面如下:

(3)按钮

界面如下:

(4)复选框

界面如下:

(5)单选框

界面如下:

(6)按钮组

界面如下:

(7)下拉框

界面如下:

(8)对话框

界面如下:

(9)文本框

界面如下:

(10)密码框

界面如下:

(11)文本域

界面如下:

(12)进度条

界面如下:

(13)文件选择器

界面如下:

<面板>

(1)基本面板

界面如下:

(2)ContentPane

界面如下:

(3)SplitPanel

界面如下:

(4)JScrollPanel

界面如下:

(5)TabbedPanel

界面如下:

(6)CardLayerout

界面如下:

<菜单>

(1)菜单栏和菜单

package practice;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public class Test33 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Kannyi");
        f.setSize(400, 300);
        f.setLocation(200, 200);

        //菜单栏
        JMenuBar mb = new JMenuBar();

        //菜单
        JMenu mHero = new JMenu("英雄");
        JMenu mItem = new JMenu("道具");
        JMenu mWord = new JMenu("符文");
        JMenu mSummon = new JMenu("召唤师");
        JMenu mTalent = new JMenu("天赋树");

        //把菜单加入到菜单栏
        mb.add(mHero);
        mb.add(mItem);
        mb.add(mWord);
        mb.add(mSummon);
        mb.add(mTalent);

        //把菜单栏加入到frame,这里用的是set而非add
        f.setJMenuBar(mb);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

(2)菜单项

package practice;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Test34 {

    public static void main(String[] args) {
        JFrame f = new JFrame("Kannyi的窗体");
        f.setSize(500, 400);
        f.setLocation(200, 200);

        JMenuBar mb = new JMenuBar();

        JMenu mHero = new JMenu("英雄");
        JMenu mItem = new JMenu("道具");
        JMenu mWord = new JMenu("符文");
        JMenu mSummon = new JMenu("召唤师");
        JMenu mTalent = new JMenu("天赋树");

        //菜单项
        mHero.add(new JMenuItem("近战"));
        mHero.add(new JMenuItem("远程"));
        mHero.add(new JMenuItem("物理"));
        mHero.add(new JMenuItem("坦克"));
        mHero.add(new JMenuItem("法系"));
        mHero.add(new JMenuItem("辅助"));
        mHero.add(new JMenuItem("打野"));
        mHero.add(new JMenuItem("突进"));
        mHero.add(new JMenuItem("男性"));
        mHero.add(new JMenuItem("女性"));
        //分隔符
        mHero.addSeparator();
        mHero.add(new JMenuItem("所有"));

        mb.add(mHero);
        mb.add(mItem);
        mb.add(mWord);
        mb.add(mSummon);
        mb.add(mTalent);

        f.setJMenuBar(mb);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

界面如下:

<工具栏>

(1)工具栏

界面如下:

(2)给按钮设置提示信息

界面如下:

(3)禁止工具栏拖动

界面如下:

<表格>

(1)基本表格

界面如下:

(2)JScrollPane

界面如下:

(3)列宽

界面如下:

(4)TableModel

界面如下:

(5)进一步理解TableModel

界面如下:

(6)TableModel与DAO结合

界面如下:

(7)TableSelectionModel

界面如下:

(8)更新Table

界面如下:

(9)输入项验证

界面如下:

(10)选中指定行

界面如下:

<日期控件>

(1)DatePicker

界面如下:

(2)JXDatePicker

界面如下:

<Swing中的线程>

(1)三种线程

界面如下:

(2)事件调度线程是单线程的

界面如下:

(3)初始化线程

界面如下:

(4)事件调度线程

界面如下:

(5)长耗时任务线程

界面如下:

<皮肤>

界面如下:

【Java项目】GUI图形用户界面(不断更新中!)的更多相关文章

  1. java第八节 GUI/图形用户界面

    /* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...

  2. AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API

    抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包. AWT是Java基础类 (JFC)的一部分,为Java程 ...

  3. 黑马程序员_<<GUI(图形用户界面)--------1>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.  GUI图形用户界面 1.简述 Gra ...

  4. JAVA记事本的图形用户界面应用程序含过滤

    JAVA记事本的图形用户界面应用程序 过滤 题目简介: 整体分析: 实验代码: package note; import java.awt.EventQueue; import java.awt.ev ...

  5. JAVA记事本的图形用户界面应用程序含加密

    JAVA记事本的图形用户界面应用程序 加密 题目简介: 整体分析: 实验代码: import java.awt.EventQueue; import java.awt.event.ActionEven ...

  6. JAVA记事本的图形用户界面应用程序

    JAVA记事本的图形用户界面应用程序 整体分析: 代码实现: import java.awt.EventQueue; import java.awt.event.ActionEvent; import ...

  7. java GUI(图形用户界面)

    GUI Graphical User Interface(图形用户接口). 用图形的方式,来显示计算机操作的界面,这样更方便更直观. CLI Command line User Interface ( ...

  8. linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)

    firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...

  9. 十一:Java之GUI图形Awt和Swing

    一. AWT和 Swing AWT 和 Swing 是 Java 设计 GUI用户界面的基础.与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件.正是这个原因,Swing 差点儿无所不能, ...

  10. GUI(图形用户界面)

    一.GUI(图形用户界面) GUI Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI Command line User ...

随机推荐

  1. 重温C语言(1)----计算算术表达式的值

    <C程序设计语言>练习题 5-10 编写程序 expr,计算从命令行输入的逆波兰表达式的值,其中每个运算符或操作数用一个单独的参数表示.例如,命令 expr 2 3 4 + * 计算表达式 ...

  2. WPF使用样式更新ArcGis InfoWindow外观代码

    <Style x:Key="mainInfoWindowStyleMF" TargetType="{x:Type esri:InfoWindow}"> ...

  3. MUI框架-04-切换页面头部文字重叠

    MUI框架-04-切换页面头部文字重叠 从现在开始就只分享 MUI 框架开发时遇到的问题了 开发不懂请查看:官方文档 问题情况 切换页面 title 文字重叠,覆盖 截图: 解决办法 给 h1 标签加 ...

  4. flask介绍

    安装flask pip3 install flask 短小精悍.可扩展强 的一个Web框架. 牛逼点:上下文管理机制 依赖wsgi: werkzeug(相当于Django的wsgi):只要安装flas ...

  5. [CentOS]安装软件问题:/lib/ld-linux.so.2: bad ELF interpreter解决

    环境: [orangle@localhost Downloads]$ uname -m&&uname -r x86_64 2.6.32-220.el6.x86_64 [orangle@ ...

  6. Linux下postgres安装fuzzystrmatch其他拓展包

    (1)安装gdal # wget http://download.osgeo.org/gdal/2.0.0/gdal-2.0.0.tar.gz # tar zxvf gdal-2.0.0.tar.gz ...

  7. DAO层,Service层,Controller层、View层介绍

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  8. Java 8 Date-Time API概览

    更新时间:2018-04-19 根据网上资料整理 java 8增加了新的Date-Time API (JSR 310),增强对日期与时间的处理.它在很大程度上受到Joda-Time的影响.之前写过一篇 ...

  9. linux 三大利器 grep sed awk sed

    sed主要内容和原理介绍 sed 流处理编辑器 sed一次处理一行内容,读入一行处理一行 sed不改变文件内容(除非重定向) sed 命令行格式 $ sed [options] 'command' f ...

  10. webapi 支持 text/plain 请求

    今天遇到一个需求,请求以HTTPS + XML 访问我的API ,普通的webapi 是不支持这个请求的,故做以下代码进行支持 新增一个类,类名为PlainTextTypeFormatter publ ...