11_1_GUI
11_1_GUI
1. AWT
AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application的GUI(Graphics User Interface 图形用户界面)编程。
GUI的各种元素:(如:窗口,按钮,文本框等)由Java类来实现。
使用AWT所涉及的类一般在java.awt包及其子包中。
Container和Component是AWT中的两个核心类。
2. Component&Container
Java的图形用户界面的最基本组成部分是Component,Component类及其子类的对象用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如,一个按钮,一个标签等。
一般的Component对象不能独立地显示出来,必须将“放在”某一的Container对象中才可以显示出来。
Container是Component子类,Container子类对象可以”容纳”别的Component对象。
Container对象可使用方法add(..)向其中添加其他Component对象。
Container是Component的子类,因此Container对象也可以当作Component对象添加到其他Container对象中。
有两种常用的Container:
Window:其对象表示自由停泊的顶级窗口
Panel:其对象可作为容纳其他Component对象,但不能独立存在,必须被添加到其他Container中(如Window或Applet)
3. Frame
Frame是Window的子类,由Frame或其子类创建的对象为一个窗体。
Frame的常用构造方法:
Frame()
Frame(String s)创建标题栏为字符串s的窗口。
setBounds(int x, int y, int width, int height)
设置窗体位置和大小,x,y是左上角坐标,width和height是宽度和高度
setSize(int width, int height)
设置窗体的大小,width和height分别是宽度和高度。
setLocation(int x, int y)
设置窗体的位置,x,y是左上角坐标
setBackground(Color c)
设置背景颜色,参数为Collor对象。
setVisible(boolean b)
设置是否可见
setTitle(String name)
设置标题
setResizable(boolean b)
设置是否可以调整大小
3.1创建窗口
TestFrame.java package Test.GUI; import java.awt.Color; import java.awt.Frame; public class TestFrame { public static void main(String[] args) { Frame f = new Frame("我的窗口"); f.setLocation(100, 200); f.setSize(100, 200); f.setBackground(Color.blue); f.setVisible(true); //不能改变大小 f.setResizable(false); } } TestMultiFrame.java package Test.GUI; import java.awt.Color; import java.awt.Frame; public class TestMultiFrame { public static void main(String[] args) { MyFrame f1 = new MyFrame(100, 100, 200, 200, Color.black); MyFrame f2 = new MyFrame(300, 100, 200, 200, Color.blue); MyFrame f3 = new MyFrame(100, 300, 200, 200, Color.red); MyFrame f4 = new MyFrame(300, 300, 200, 200, Color.CYAN); } } class MyFrame extends Frame { static int id = 0; MyFrame(int x, int y, int w, int h, Color color) { super("MyFrame" + (++id)); setLayout(null); setBounds(x, y, w, h); setBackground(color); setVisible(true); } }
4. Panel
Panel对象可以看成可以容纳Component的空间
Panel对象可以拥有自己的布局管理器
Panel类拥有从其父类继承而来的
setBounds(int x, int y, int width, int height)
setSize(int width, int height)
setLocation(int x, int y)
setBackground(Color c)
setLayout(LayoutManager mgr)等方法。
Panel的构造方法为:
Panel()使用默认的FlowLayout类布局管理器初始化。
Panel(LayoutManager layout)使用指定的布局管理器初始化。
4.1创建panel
TestPanel.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Panel; public class TestPanel { public static void main(String[] args) { Frame f = new Frame("Java Frame with Panel"); Panel p = new Panel(null); f.setLayout(null); f.setBounds(300, 300, 500, 500); f.setBackground(new Color(0, 0, 102)); p.setBounds(50, 50, 400, 400); p.setBackground(new Color(204, 204, 255)); f.add(p); f.setVisible(true); } } TestMultiPanel.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Panel; public class TestMultiPanel { public static void main(String[] args) { new MyFrame2("MyFrame With Panel", 300, 300, 400, 300); } } class MyFrame2 extends Frame { private Panel p1, p2, p3, p4; MyFrame2(String s, int x, int y, int w, int h) { super(s); setLayout(null); p1 = new Panel(null); p2 = new Panel(null); p3 = new Panel(null); p4 = new Panel(null); p1.setBounds(0, 0, w/2, h/2); p2.setBounds(0, h/2, w/2, h/2); p3.setBounds(w/2, 0, w/2, h/2); p4.setBounds(w/2, h/2, w/2, h/2); p1.setBackground(Color.black); p2.setBackground(Color.red); p3.setBackground(Color.gray); p4.setBackground(Color.blue); add(p1); add(p2); add(p3); add(p4); setBounds(x, y, w, h); setVisible(true); } } CenterPanel.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Panel; public class CenterPanel { public static void main(String[] args) { new MyFrame3("MyFrame3", 300, 300, 400, 400, Color.blue); } } class MyFrame3 extends Frame { private Panel p; MyFrame3(String s, int x, int y, int w, int h, Color color) { super(s); setLayout(null); p = new Panel(null); p.setBounds(w/4, h/4, w/2, h/2); p.setBackground(Color.yellow); add(p); setBounds(x, y, w, h); setBackground(color); setVisible(true); } }
5. 布局管理器
Java语言中,提供了布局管理器类的对象可以管理
管理Component在Container中的布局,不必直接设置Component位置和大小。
每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象。
Awt提供了5种布局管理器:
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
5.1FloyLayout布局管理器
FlowLayout是Panel类的默认布局管理器。
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原由尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。
FlowLayout布局管理器默认的对齐方式是居中。
5.1.1FlowLayout的构造方法
new FlowLayout(FlowLayout.RIGHT, 20, 40);
右对齐,组件之间水平间距20个像素,垂直间距40个像素。
new FlowLayout(FlowLayout.LEFT);
左对齐,水平和垂直间距为缺省值(5)。
new FlowLayout();
使用默认的居中对齐方式,水平和垂直间距为缺省值(5)。
TestFlowLayout.java package Test.GUI; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; public class TestFlowLayout { public static void main(String[] args) { Frame f = new Frame("FlowLayout"); Button b1 = new Button("ok"); Button b2 = new Button("open"); Button b3 = new Button("close"); f.setLayout(new FlowLayout()); f.add(b1); f.add(b2); f.add(b3); f.setSize(200, 200); f.setVisible(true); } } TestFlowLayout2.java package Test.GUI; import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; public class TestFlowLayout2 { public static void main(String[] args) { Frame f = new Frame("FlowLayout"); FlowLayout l = new FlowLayout(FlowLayout.CENTER, 20, 40); f.setLayout(l); f.setBackground(Color.blue); for (int i = 0; i < 5; i++) { f.add(new Button("BUTTON")); } f.setBounds(200, 200, 600, 800); f.setVisible(true); } }
5.2BorderLayout布局管理器
BorderLayout是Frame类的默认布局管理器。
BorderLayout将整个容器的布局划分成
东(EAST)
西(WEST)
南(SOUTH)
北(NORTH)
中(CENTER)
五个区域,组件只能被添加到指定的区域。
如不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如多加人多个,则先前加入的会被覆盖。
5.2.1BorderLayout型布局容器尺寸缩放原则:
北、南两个区域在水平方向缩放。
东、西两个区域在垂直方向缩放。
中部可在两个方向缩放。
TestBorderLayout.java package Test.GUI; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; public class TestBorderLayout { public static void main(String[] args) { Frame f; f = new Frame("Border Layout"); Button bn = new Button("BN"); Button bs = new Button("BS"); Button bw = new Button("BW"); Button be = new Button("BE"); Button bc = new Button("BC"); f.add(bn, BorderLayout.NORTH); f.add(bs, BorderLayout.SOUTH); f.add(bw, BorderLayout.WEST); f.add(be, BorderLayout.EAST); f.add(bc, BorderLayout.CENTER); f.setSize(200, 200); f.setVisible(true); } }
5.3GridLayout布局管理器
GridLayout型布局管理器将空间划分成规则的矩形网络,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
在GridLayout构造方法中指定分隔的行数和列数。
如:GridLayout(3,4)
TestGridLayout.java package Test.GUI; import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; public class TestGridLayout { public static void main(String[] args) { Frame f = new Frame("GridLayout"); Button b1 = new Button("b1"); Button b2 = new Button("b2"); Button b3 = new Button("b3"); Button b4 = new Button("b4"); Button b5 = new Button("b5"); Button b6 = new Button("b6"); f.setLayout(new GridLayout(3,2)); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack(); f.setVisible(true); } } TenButtons.java package Test.GUI; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Panel; public class TenButtons { public static void main(String[] args) { Frame f = new Frame("Java Frame"); f.setLayout(new GridLayout(2,1)); f.setBounds(300, 400, 300, 200); f.setBackground(new Color(204, 204, 255)); Panel p1 = new Panel(new BorderLayout()); Panel p2 = new Panel(new BorderLayout()); Panel p11 = new Panel(new GridLayout(2,1)); Panel p21 = new Panel(new GridLayout(2,2)); p1.add(new Button("BUTTON"), BorderLayout.WEST); p1.add(new Button("BUTTON"), BorderLayout.EAST); p11.add(new Button("BUTTON")); p11.add(new Button("BUTTON")); p1.add(p11, BorderLayout.CENTER); p2.add(new Button("BUTTON"), BorderLayout.WEST); p2.add(new Button("BUTTON"), BorderLayout.EAST); for (int i = 0; i < 4; i++) { p21.add(new Button("BUTTON")); } p2.add(p21, BorderLayout.CENTER); f.add(p1); f.add(p2); f.setVisible(true); } }
6. 布局管理器总结
Frame是顶级窗口,Frame的缺省布局管理器为BorderLayout
Panel无法单独显示,必须添加到某个容器中。
Panel的缺省布局管理器为FlowLayout。
当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。
使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds等方法,则都会被布局管理器覆盖。
如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:
setLayout(null)
7. 事件监听
注册
接到时间对象后进行某种处理
当某种事件发生 向监听器传送某种事件对象(封装了某种事件的信息)
TestActionEvent.java package Test.GUI; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionEvent { public static void main(String[] args) { Frame f = new Frame("ActionEvent"); Button b = new Button("Press Me"); Monitor m = new Monitor(); b.addActionListener(m); f.add(b, BorderLayout.CENTER); f.pack(); f.setVisible(true); } } class Monitor implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.out.println("事件处理"); } } TestActionEvent2.java package Test.GUI; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionEvent2 { public static void main(String[] args) { Frame f = new Frame("Test"); Button b1 = new Button("start"); Button b2 = new Button("stop"); Monitor2 m2 = new Monitor2(); b1.addActionListener(m2); b2.addActionListener(m2); b2.setActionCommand("Game Over"); f.add(b1, BorderLayout.NORTH); f.add(b2, BorderLayout.CENTER); f.pack(); f.setVisible(true); } } class Monitor2 implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.out.println("a button has been pressed," + "the relative info is:\n" + e.getActionCommand()); } } TFActionEvent.java package Test.GUI; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TFActionEvent { public static void main(String[] args) { new TFFrame(); } } class TFFrame extends Frame { public TFFrame() { TextField tf = new TextField(); add(tf); tf.addActionListener(new TFActionListener()); pack(); setVisible(true); } } class TFActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { TextField tf = (TextField)e.getSource(); System.out.println(tf.getText()); tf.setText(""); } } TFPassword.java package Test.GUI; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TFPassword { public static void main(String[] args) { new TFFrame2(); } } class TFFrame2 extends Frame { public TFFrame2() { TextField tf = new TextField(); add(tf); tf.addActionListener(new TFActionListener2()); tf.setEchoChar('*'); pack(); setVisible(true); } } class TFActionListener2 implements ActionListener { @Override public void actionPerformed(ActionEvent e) { TextField tf = (TextField)e.getSource(); System.out.println(tf.getText()); tf.setText(""); } } TFMath.java package Test.GUI; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TFMath { public static void main(String[] args) { new TFFrame3().launchFrame(); } } class TFFrame3 extends Frame { public void launchFrame() { TextField num1 = new TextField(10); TextField num2 = new TextField(10); TextField num3 = new TextField(15); Label jb = new Label("+"); Button jd = new Button("="); setLayout(new FlowLayout()); jd.addActionListener(new MyMonitor(num1, num2, num3)); add(num1); add(jb); add(num2); add(jd); add(num3); pack(); setVisible(true); } } class MyMonitor implements ActionListener { public MyMonitor(TextField num1, TextField num2, TextField num3) { super(); this.num1 = num1; this.num2 = num2; this.num3 = num3; } TextField num1, num2, num3; public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText("" + (n1 + n2)); } } TFMath.java package Test.GUI; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TFMath { public static void main(String[] args) { new TFFrame3().launchFrame(); } } class TFFrame3 extends Frame { TextField num1, num2, num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15); Label jb = new Label("+"); Button jd = new Button("="); setLayout(new FlowLayout()); jd.addActionListener(new MyMonitor(this)); add(num1); add(jb); add(num2); add(jd); add(num3); pack(); setVisible(true); } } class MyMonitor implements ActionListener { /*public MyMonitor(TextField num1, TextField num2, TextField num3) { super(); this.num1 = num1; this.num2 = num2; this.num3 = num3; } TextField num1, num2, num3;*/ TFFrame3 tf = null; public MyMonitor(TFFrame3 tf) { this.tf = tf; } public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(tf.num1.getText()); int n2 = Integer.parseInt(tf.num2.getText()); tf.num3.setText("" + (n1 + n2)); } }
8. 内部类
好处:
可以方便的访问包装类的成员
可以更清楚的组织逻辑,防止不应该被其他类访问的类进行访问。
何时使用:
该类不允许或不需要其他类进行访问时。
TFMath.java package Test.GUI; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TFMath { public static void main(String[] args) { new TFFrame3().launchFrame(); } } class TFFrame3 extends Frame { TextField num1, num2, num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15); Label jb = new Label("+"); Button jd = new Button("="); setLayout(new FlowLayout()); jd.addActionListener(new MyMonitor()); add(num1); add(jb); add(num2); add(jd); add(num3); pack(); setVisible(true); } class MyMonitor implements ActionListener { public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); num3.setText("" + (n1 + n2)); } } } //class MyMonitor implements ActionListener { // // /*public MyMonitor(TextField num1, TextField num2, TextField num3) { // super(); // this.num1 = num1; // this.num2 = num2; // this.num3 = num3; // } // TextField num1, num2, num3;*/ // TFFrame3 tf = null; // public MyMonitor(TFFrame3 tf) { // this.tf = tf; // } // public void actionPerformed(ActionEvent e) { // int n1 = Integer.parseInt(tf.num1.getText()); // int n2 = Integer.parseInt(tf.num2.getText()); // tf.num3.setText("" + (n1 + n2)); // } // //}
9. paint方法
TestPaint.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; public class TestPaint { public static void main(String[] args) { new PaintFrame().launchFrame(); } } class PaintFrame extends Frame { public void launchFrame() { setBounds(200, 200, 640, 480); setVisible(true); } public void paint(Graphics g) { Color c = g.getColor(); g.setColor(Color.red); g.fillOval(50, 50, 30, 30); g.setColor(Color.green); g.fillRect(80, 80, 40, 40); g.setColor(c); } }
10.鼠标事件适配器
抽象类java.awt.event.MouseAdapter实现了MouseListener接口,可以使用其子类作为MouseEvent的监听器,只要重写其相应的方法即可。
对于其他的监听器,也有对应的适配器。
使用适配器可以避免监听器类型定义没有必要的空方法。
MyMouseAdapter.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Iterator; public class MyMouseAdapter { public static void main(String[] args) { new MyFrame4("drawing"); } } class MyFrame4 extends Frame { ArrayList points = null; public MyFrame4(String s) { super(s); points = new ArrayList(); setLayout(null); setBounds(300, 300, 400, 400); setBackground(new Color(204, 204, 255)); setVisible(true); addMouseListener(new Monitor4()); } public void paint(Graphics g){ Iterator i = points.iterator(); while (i.hasNext()) { Point p = (Point) i.next(); g.setColor(Color.blue); g.fillOval(p.x, p.y, 10, 10); } } public void addPoint(Point p) { points.add(p); } } class Monitor4 extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { MyFrame4 f = (MyFrame4) e.getSource(); f.addPoint(new Point(e.getX(), e.getY())); f.repaint(); } } package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Iterator; public class MyMouseAdapter { public static void main(String[] args) { new MyFrame4("drawing"); } } class MyFrame4 extends Frame { ArrayList<Point> points = null; public MyFrame4(String s) { super(s); points = new ArrayList<Point>(); setLayout(null); setBounds(300, 300, 400, 400); setBackground(new Color(204, 204, 255)); setVisible(true); addMouseListener(new Monitor4()); } public void paint(Graphics g){ Iterator<Point> i = points.iterator(); while (i.hasNext()) { Point p = i.next(); g.setColor(Color.blue); g.fillOval(p.x, p.y, 10, 10); } } public void addPoint(Point p) { points.add(p); } } class Monitor4 extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { MyFrame4 f = (MyFrame4) e.getSource(); f.addPoint(new Point(e.getX(), e.getY())); f.repaint(); } }
11匿名类
TestWindowClose.java package Test.GUI; import java.awt.Color; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestWindowClose { public static void main(String[] args) { new MyFrame5("drawing"); } } class MyFrame5 extends Frame { public MyFrame5(String s) { super(s); setLayout(null); setBounds(300, 300, 400, 400); setBackground(new Color(204, 204, 255)); setVisible(true); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } }); } } TestAnoymous2.java package Test.GUI; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestAnoymous2 { public static void main(String[] args) { new TestAnoymous2(); } Frame f = new Frame("TestAnoymous2"); TextField tf = new TextField(10); Button b = new Button("start"); public TestAnoymous2() { f.add(b, BorderLayout.NORTH); f.add(tf, BorderLayout.SOUTH); b.addActionListener(new ActionListener() { private int i; @Override public void actionPerformed(ActionEvent e) { tf.setText(e.getActionCommand() + (++i)); } }); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); f.pack(); f.setVisible(true); } } TestKey.java package Test.GUI; import java.awt.Frame; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; public class TestKey { public static void main(String[] args) { new KeyFrame(); } } class KeyFrame extends Frame { public KeyFrame() { setBounds(200, 200, 300, 300); addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if(keyCode == KeyEvent.VK_UP) { System.out.println("UP"); } } }); pack(); setVisible(true); } }
11_1_GUI的更多相关文章
随机推荐
- ORACLE分页SQL
1,使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) 2,使用between SEL ...
- CSS选择器笔记,element element和element > element 的区别
看官方解释 element element 例子: div p 官方解释:div内部所有的p元素 就是说 只要p在div内部.如果 p在span内部,span在div内部,p也算在div内部 < ...
- javascript获取行间样式和非行间样式--兼容写法
style:获取行间样式: currentStyle:获取计算后的样式,也叫当前样式.最终样式. 优点:可以获取元素的最终样式,包括浏览器的默认值,而不像style只能获取行间样式,所以更常用到.注意 ...
- spring boot Configuration Annotation Proessor not found in classpath
出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationPropertie ...
- jQ中css()和addClass的区别之优先级
笔者在实现点击表格中某行添加高亮的效果时,发现一个css()和addClassd()的冲突,具体代码如下: <style> .se { background:#FF6500; color: ...
- css3骰子(transform初识)
利用css3制作可旋转的骰子,效果图如下,也可以查看 demo: 首先是骰子的html结构,.page 是骰子的六个页面的 class,#one-#six分别表示六个面,.point 是骰子表面的点数 ...
- 如何使用Nunit进行测试
如何使用Nunit进行测试(Visual Studio 2017 comminity) 原文:如何使用Nunit进行测试(Visual Studio 2017 comminity) 一.环境 操作系统 ...
- Linux文件种类与扩展名
一.文件种类 1)普通文件:ls -al第一个字符为[-]的 纯文本文件(ASCII) 二进制文件(binary):Linux中的可执行文件 数据格式文件(data):特定格式的文件,如:Linux登 ...
- easyUI 节点树选择
定义: <input id="treeFFatherId" name="treeFFatherId" value="" style=& ...
- IDEA下通过Git实现代码管理
IDEA下通过Git实现代码管理 1.介绍 1.1 Git概述 Git是类似于SVN等代码管理软件,使用分布式技术实现.Github是互联网代码仓库,每个人可以在上面创建自己的仓库,使用git完成同g ...