java复习之图形界面设计
图形界面设计
- AWT和Swing
- 组件
- 顶层容器
- JFrame类常用的构造方法
- 内容窗格
- 面板
- JPanel类常用的构造方法
- AWT滚动条组件
- 标签
- 按钮
- JButton构造方法
- JButton类常用方法
- 切换按钮、复选按钮及单选按钮
- JToggleButton
- FlowLayout布局管理器
- 3种构造方法
- BorderLayout布局管理器
- GridLayout布局管理器
- CardLayout
- CardLayout有两种构造方法
- BoxLayout布局管理器
- 事件处理模型
- 事件的种类
- 事件适配器
- 颜色
- 文字
- 文字构造方法
- Graphics类的基本功能
- Graphics2D绘图
AWT和Swing
图形用户界面(Graphical User Interface,GUI)是大多数程序不可缺少的部分.Java的图形用户界面由各种组件构成,在java.awt包和javax.swing包中定义了多种用于创建图形用户界面的组件类。设计图形用户界面时一般有3个步骤,分别是选取组件、设计布局及响应事件。
不包含本地代码的Swing组件被称为“轻量级”组件,而包含本地代码的AWT组件被称为“重量级”组件。
组件
所谓容器组件是指可以包含其他组件的组件,又分为顶层容器和一般用途容器。而非容器组件则必须要包含在容器中。Java为所有容器类定义了父类Container,容器的共有操作都定义在Container类中。
顶层容器
Swing中提供了4种顶层容器,分别为JFrame、JApplet、JDialog和JWindow。创建应用程序时需要使用JFrame。创建小应用程序时使用JApplet,它被包含在浏览器窗口中。创建对话框时使用JDialog。JWindow是一个不带有标题行和控制按钮的窗口,通常很少使用。
JFrame类常用的构造方法
·JFrame( ):构造一个初始时不可见、无标题的新框架窗体。
·JFrame(String title):创建一个初始时不可见、具有指定标题的新框架窗体。
JFrame类中定义了一些相关方法,另外也从祖先类中继承了一些方法。常用的方法有以下几种。
·void setBounds(int x,int y,int width,int height):移动并调整框架大小。左上角位置的横纵坐标分别由x和y指定,框架的宽高分别由width和height指定。
·void setSize(int width,int height):设置框架的大小,宽度是width,高度是height。
·void setBackground(Color bg):使用颜色bg设置框架的背景色。
·void setVisible(boolean aFlag):设置框架可见或不可见。
·void pack( ):调整框架的大小,以适合其子组件的首选大小和布局。
·void setTitle(String title):设置框架的标题为字符串title。
·Container getContentPane( ):返回此框架窗体的内容窗格对象。
·void setLayout(Layout Manager manager):设置布局管理器。
创建窗口用到的JFrame和JButton类定义在javax.swing包中,而BorderLayout定义在java.awt包中,程序的最开始要引入这两个包。
内容窗格
4个顶层容器中的每一个都有一个内容窗格。除菜单之外,顶层容器中的组件都放在这个内容窗格中。有两种方法可以将组件放入内容窗格中,一种方法是通过顶层容器getContentPane( )方法获得其默认的内容窗格。getContentPane( )方法的返回类型为java.awt.Container,它仍然是一个容器。然后将组件添加到内容窗格中,例如:
Container contentPane=frame.getContentPane( );
contentPane.add(button,BorderLayout.CENTER);
顶层容器默认内容窗格的布局管理器是BorderLayout,而JPanel默认的布局管理器是FlowLayout。
面板
是用途广泛的容器。与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部。
JPanel类常用的构造方法
·JPanel( ):创建具有FlowLayout布局的新面板。
·JPanel(LayoutManager layout):创建具有指定布局管理器的新面板。使用public Component add(Component comp)方法可以将指定组件追加到面板中。
JScrollPane是带有滚动条的面板,它是Container类的子类。但是只能添加一个组件。所以当有多个组件需要添加时,一般是先将多个组件添加到JPanel中,然后再将这个JPanel添加到JScrollPane中。JScrollPane类中常用的构造方法有以下几种。
·JScrollPane( ):创建一个空的JScrollPane,需要时水平和垂直滚动条都可显示。
·JScrollPane(Component view):创建一个显示指定组件内容的JScrollPane,只要组件的内容超过视图大小,就会显示水平和垂直滚动条。
JScrollPane类中常用的方法有以下几种。
·void setHorizontalScrollBarPolicy(int policy):确定水平滚动条何时显示在滚动窗格上。参数policy的可选值为下列三者之一。
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED:需要时可见。
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER:总是不可见。
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS:总是可见。
·void setVerticalScrollBarPolicy(int policy):确定垂直滚动条何时显示在滚动窗格上。参数policy的可选值为下列三者之一:
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED:需要时可见。
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER:总是不可见。
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS:总是可见。
AWT滚动条组件
·Scrollbar( ):构造一个新的垂直滚动条。
·Scrollbar(int orientation):构造一个具有指定方向的新滚动条。orientation指示滚动条的方向,其值是Scrollbar.HORIZONTAL或是Scrollbar.VERTICAL,分别指示滚动条是水平滚动条,还是垂直滚动条。
·Scrollbar(int orientation,int value,int visible,
int minimum,int maximum):构造一个新的滚动条,它具有指定的方向、初始值、可视量、最小值和最大值。orientation的值如前所述,value是滚动条的初始值,visible是滚动条的可视量,通常由滑动块的大小表示,minimum是滚动条的最小值,maximum是滚动条的最大值。
标签
标签(JLabel)对象是最简单的Swing组件,通常用于显示提示性的文本信息或图标,不可被编辑,其构造方法有以下6种形式。
·JLabel( ):创建一个既不显示文本信息又不显示图标的空标签。
·JLabel(Icon image):创建一个显示图标的标签。
·JLabel(String text):创建一个显示文本信息的标签。
·JLabel(Icon image,int horizontalAlignment):创建一个显示图标的标签,水平对齐方式由int型参数horizontalAlignment指定。
·JLabel(String text,int horizontalAlignment):创建一个显示文本信息的标签,水平对齐方式由int型参数horizontalAlignment指定。
·JLabel(String text,Icon icon,int horizontalAlignment):创建一个同时显示文本信息和图标的标签,水平对齐方式由int型参数horizontalAlignment指定。
构造方法中,表示水平对齐方式的int型参数horizontalAlignment的取值可以为JLabel.LEFT,JLabel.RIGHT和JLabel.CENTER常量,分别表示左对齐、右对齐和居中对齐。
按钮
经常用到的按钮有4种形式:JButton、JToggleButton、JCheckBox和JRadioButton
它们均是AbstractButton的子类或间接子类。各种按钮上都可以设置文本、设置图标、注册事件侦听程序。在AbstractButton中定义了按钮所共有的一些方法,例如addActionListener( )、setEnabled( )、setText( )和setIcon( )等。
JButton构造方法
·JButton( ):创建一个既没有显示文本又没有图标的按钮。
·JButton(Icon icon):创建一个没有显示文本但有图标的按钮。
·JButton(String text):创建一个有显示文本但没有图标的按钮。
·JButton(String text,Icon icon):创建一个既有显示文本又有图标的按钮。
当用户用鼠标单击按钮时,事件处理系统将向按钮发送一个ActionEvent事件类对象,如果程序需要对此做出反应,则需要使用addActionListener( ) 为按钮注册事件侦听程序并实现ActionListenner接口。
JButton类常用方法
·public void setMnemonic(int mnemonic):设置当前按钮的键盘助记符。
·public void setText(String text):设置按钮的文本。
·public String getText( ):返回按钮的文本。
·public void setToolTipText(String text):设置要显示的提示文本。
·public void addActionListener(ActionListenerl):为按钮添加事件侦听程序。
切换按钮、复选按钮及单选按钮
除了普通按钮JButton外,还有切换按钮(JToggleButton)、复选按钮(JCheckBox)和单选按钮(JRadioButton)。
JToggleButton
具有两种状态的按钮,即选中状态和未选中状态。
JToggleButton的构造方法主要有以下几种格式。
·JToggleButton( ):创建一个既没有显示文本又没有图标的切换按钮。
·JToggleButton(Icon icon):创建一个没有显示文本但有图标的切换按钮。
·JToggleButton(Icon icon,boolean selected):创建一个没有显示文本但有图标和指定初始状态的切换按钮。
·JToggleButton(String text):创建一个有显示文本但没有图标的切换按钮。
·JToggleButton(String text,boolean selected):创建一个有显示文本和指定初始状态但没有图标的切换按钮。
·JToggleButton(String text,Icon icon):创建一个既有显示文本又有图标的切换按钮。
·JToggleButton(String text,Icon icon,boolean selected):创建一个既有显示文本又有图标和指定初始状态的切换按钮。
构造方法中如果没有指定按钮的初始状态,则默认处于未选中状态。
JCheckBox和JRadioButton都是JToggleButton的子类,构造方法的格式与JToggleButton相同,它们也都具有选中和未选中两种状态。
在JToggleButton类中定义了一个isSelected( )方法,通过该方法可以获知按钮的当前状态:当返回值为true时表示处于选中状态,而返回值为false时则表示处于未选中状态。
FlowLayout布局管理器
每个容器都有一个默认的布局管理器,可以通过容器的setLayout( )方法改变容器的布局管理器。FlowLayout定义在java.awt包中。
3种构造方法
·FlowLayout( ):创建一个默认的FlowLayout布局管理器,居中对齐,默认的水平和垂直间距是5个像素。
·FlowLayout(int align):创建一个新的FlowLayout布局管理器,对齐方式是指定的,默认的水平和垂直间距是5个像素。
·FlowLayout(int align,int hgap,int vgap):创建一个新的FlowLayout布局管理器,具有指定的对齐方式以及指定的水平和垂直间距。
align的可取值有FlowLayout.LEFT、FlowLayout.RIGHT和FlowLayout.CENTER三种形式,分别对应组件的左对齐、右对齐和居中对齐方式。
与其他布局管理器不同的是,FlowLayout布局管理器并不强行设定组件的大小,而是允许组件拥有它们自己所希望的尺寸。每个组件都有一个getPreferredSize( )方法,容器的布局管理器会调用这一方法取得每个组件希望的大小。
BorderLayout布局管理器
BorderLayout是顶层容器中内容窗格的默认布局管理器,它提供了一种较为复杂的组件管理方案。
容器被划分成5个区域,分别代表容器的上部(North)、下部(South)、左部(West)、右部(East)和中部(Center),分别使用常量BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.EAST和BorderLayout.CENTER来表示。
如果在add( )方法中没有指定将组件放到哪个区域,则默认地会被放置在Center区域,
在容器的每个区域,可以加入一个组件。BorderLayout定义在java.awt包中,BorderLayout布局管理器有两种构造方法。
·BorderLayout( ):构造一个组件之间没有间距的新的BorderLayout布局管理器。
·BorderLayout(int hgap,int vgap):用指定的组件之间的水平和垂直间距构造一个BorderLayout布局管理器。在BorderLayout布局管理器的管理下,组件必须通过add( )方法加入到容器中的指定区域。
GridLayout布局管理器
GridLayout是一种网格式的布局管理器,它将容器空间划分成若干行乘若干列的网格,组件依次放入其中,每个组件占据一格。
GridLayout定义在java.awt包中,有3种构造方法,分别如下。
·GridLayout( ):创建一个只有一行的网格,网格的列数根据实际需要而定。
·GridLayout(int rows,int cols):创建具有指定行数和列数的网格布局。
·GridLayout(int rows,int cols,int hgap,int vgap):创建具有指定行数和列数,且有指定水平间距和垂直间距的网格布局。
CardLayout
定义在java.awt包中的布局管理器,这是一种卡片式的布局管理器,它将容器中的组件处理为一系列卡片,每一时刻只显示出其中的一张,而容器充当卡片的容器。
CardLayout有两种构造方法
·CardLayout( ):创建一个默认的无间距的新的CardLayout布局管理器。
·CardLayout(int hgap,int vgap):创建一个具有指定的水平和垂直间距的新的CardLayout布局管理器。
除了可以使用add( )将组件加入容器外,CardLayout还有以下一些常用方法。
·public void first(Container parent):翻转到容器的第一张卡片。
·public void next(Container parent):翻转到指定容器的下一张卡片。如果当前的可见卡片是最后一张,则此方法翻转到布局的第一张卡片。
·public void previous(Container parent):翻转到指定容器的前一张卡片。如果当前的可见卡片是第一张,则此方法翻转到布局的最后一张卡片。
·public void last(Container parent):翻转到容器的最后一张卡片。
·public void show(Container parent ,String name)翻转到已添加到此布局的具有指定name的卡片。如果不存在这样的卡片,则不发生任何操作。
BoxLayout布局管理器
BoxLayout是定义在javax.swing包中的另一种常用布局管理器,它将容器中的组件按水平方向排成一行或按垂直方向排成一列。
。BoxLayout构造方法只有一个,BoxLayout(Container target,int axis):创建一个将沿给定轴放置组件的布局管理器。其中,Container型参数target指明是为哪个容器设置此BoxLayout布局管理器,int型参数axis指明组件的排列方向,通常使用的是常量BoxLayout.X_AXIS或BoxLayout.Y_AXIS,分别表示按水平方向排列或按垂直方向排列。
在javax.swing包中定义了一个专门使用BoxLayout的特殊容器——Box类,Box类中提供了创建Box实例的静态方法。
·public static BoxcreateHorizontalBox( ):使用水平方向的BoxLayout。
·public static BoxcreateVerticalBox( ):使用垂直方向的BoxLayout。
除了创建Box实例的静态方法之外,Box类中还提供了一些创建不可见组件的方法,例如:
·public static Component createHorizontalGlue( )。填满水平空间
·public static Component createVerticalGlue( )。填满垂直空间
·public static Component createHorizontalStrut(int width)。固定水平
·public static Component createVerticalStrut(int height)。固定垂直
·public static Component createRigidArea(Dimensiond)。指定大小的组件
这些不可见组件可以增加可见组件之间的距离。
事件处理模型
为了接收并处理某类用户事件,组件必须注册相应的事件处理程序,这种事件处理程序称为事件侦听程序(Listener,也称为侦听器),它是实现了对应侦听程序接口的一个类。
给事件注册侦听事件的步骤:
①程序中引入java.awt.event包。
import java.awt.event;
②给所需的事件源对象注册事件侦听程序。事件源对象.addXXXListener(XXXListener);
③实现相应的方法。若某个侦听程序接口包含多个方法,则需要实现所有的方法。
事件的种类
在java.awt.event包和javax.swing.event包中还定义了很多其他事件类,例如,ActionEvent、ItemEvent、MouseEvent和KeyEvent等,每种事件类都有一个对应的接口,接口中声明了一个或多个抽象的事件处理方法。凡是需要接收并处理事件类对象的类,都需要实现相应的接口。
事件类型 | 组件 | 接口名称 | 方法及说明 |
---|---|---|---|
ActionEvent |
JButton、
JCheckBox、 JComboBox、 JMenuItem、 JRadioButton |
ActionListener | actionPerformed(ActionEvent)单击按钮、选择菜单项,或在文本框中按〈Enter〉键时 |
AdjustmentEvent | JScrollBar |
Adjustment Listener |
adjustmentValueChanged (AdjustmentEvent) 当改变滚动条滑块位置时 |
---|---|---|---|
ComponentEvent |
JComponent 类及其子类 |
Component
Listener |
componentMoved (ComponentEvent)组件移动时 componentHidden componentResized componentShown |
ContainerEvent |
JContainer 类及其子类 |
Container
Listener |
componentAdded(ContainerEvent) 添加组件时 componentRemoved |
FocusEvent |
同Component
Event |
Focus
Listener |
focusGained(FocusEvent) 组件获得焦点时 focusLost(FocusEvent) |
ItemEvent |
JCheckBox、
JCheckboxMenuItem、JComboBox、 |
Item
Listener |
itemStateChanged(ItemEvent) 选择复选框、选项框、单击列表框、 选中带复选框时 |
KeyEvent |
同Component
Event |
KeyListener |
keyPressed(KeyEvent)键按下时
keyReleased(KeyEvent)键释放时 keyTyped(KeyEvent)击键时 |
Mouse
ButtonEvent |
同Component
Event |
MouseListener |
mousePressed(MouseEvent) 鼠标键按下时 mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent) |
Mouse
MotionEvent |
同Component
Event |
MouseMotionListener |
mouseDragged(MouseEvent) 鼠标拖放时、 mouseMoved(MouseEvent) |
TextEvent |
JTextField、
JTextArea |
TextListener |
textValueChanged(TextEvent) 文本框、文本区内容修改时 |
WindowEvent |
JFrame、
JWindow、 JDialog |
Window
Listener |
windowClosing(WindowEvent) 窗口关闭时 windowOpened(WindowEvent) windowlconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) |
事件适配器
为了编程方便,Java为一些声明了多个方法的Listener接口提供了相对应的适配器类。
接口名称 | 适配器名称 | 接口名称 | 适配器名称 |
---|---|---|---|
Component
Listener |
ComponentAdapter | MouseListener | MouseAdapter |
Container
Listener |
ContainerAdapter |
MouseMotion
Listener |
MouseMotion
Adapter |
FocusListener | FocusAdapter |
Mouselnput
Listener |
Mouselnput
Adapter |
KeyListener | KeyAdapter | WindowListener | WindowAdapter |
在适配器类中实现了相应接口中的全部方法,只是方法的内容为空。例如,MouseListener接口的形式如下。
public interface MouseListener extends EventListener{
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);}
与其对应的适配器为MouseAdapter,形式如下:
public abstract class MouseAdapter implements MouseListener{ }
public void mouseClicked(MouseEvent e){ }
public void mousePressed(MouseEvent e){ }
public void mouseReleased(MouseEvent e){ }
public void mouseEntered(MouseEvent e){ }
public void mouseExited(MouseEvent e)){ }
颜色
·public void setForeground(Color c):设置前景色。
·public void setBackground(Color c):设置背景色。
在这两个方法中,都需要java.awt.Color类的一个实例作参数,包括Color类中预定义的颜色常量,比如Color.red和Color.blue,或是自己创建的颜色。
文字
显示文字的方法主要有以下3种。
·public void drawChars(char[ ]data,int offset,int length,int x,int y):使用此图形上下文的当前字体和颜色显示字符数组data中从offset位置开始、最多length个字符。首字符的基线位于此图形上下文坐标系统的(x,y)处。
·public void drawString(String aString,int x,int y):在指定位置显示字符串aString。
·public void drawBytes(byte[ ]data,int offset,int length,int x,int y):使用此图形上下文的当前字体和颜色显示由指定的byte数组data中从offset位置开始、最多length个字符。
文字字形有字体、样式及字号3个要素。基本的样式有Font.PLAIN(正常)、Font.BOLD(粗体)及Font.ITALIC(斜体)3种,也称为字形风格。字号是字的大小,单位是磅
文字构造方法
可以使用SetFont(Font f)方法对组件中文本的字体进行设定,这个方法需要java.awt.Font类的一个实例作参数。在Java中并没有预定义的字体常量,因此需要通过给定字体名称、样式和大小自己创建Font对象。Font类的构造方法如下。
·Font(String name,int style,int size):根据指定名称、样式和字号,创建一个新Font对象。Font构造方法的3个参数分别是字体名称、字体的样式和字号。例如:
Font f=new Font(“Dialog”,FontPLAIN,14);
Font类中常用的方法如下。
·String getName( ):返回此Font的逻辑名称,即字体名称。
·int getSize( ):返回此Font的字号大小,舍入为整数。
·int getStyle( ):返回此Font的样式。
·boolean isBold( ):测试此Font对象的样式是否为BOLD。
·boolean isltalic( ):测试此Font对象的样式是否为ITALIC。
·boolean isPlain( ):测试此Font对象的样式是否为PLAIN。
Graphics类的基本功能
java.awt包中的Graphics类是所有图形处理的基础。绘图模式主要有两种,分别是正常模式和异或模式。在某个组件中绘图,一般应该为这个组件所属的子类重写paint( )方法,在该重写的方法中进行绘图。但要在JComponent子类的组件中绘图,应重写paintComponent( )方法,在该方法中进行绘图。
通常情况下,如果需要在组件上绘制图形,只需要重写JComponent的paintComponent(Graphicsg)方法。
多边形也可以画成填充的或不填充的。画多边形的方法分别是drawPolygon( )和fillPolygon( )。这两种方法都是重载的。
Graphics2D绘图
Java2D包括一个继承于Graphics类的Graphics2D类。
(1)stroke属性
(2)paint属性
(3)transform属性
(4)clip属性
(5)composit属性
java复习之图形界面设计相关推荐
- 【JAVA】基本图形界面设计
[JAVA]基本图形界面设计 基本知识点 JAVA中的组件包: 1:采用java.awt.*(abstract Windowing Toolkit) 2:采用javax.swing.* 特点: 前者: ...
- Java实验二 图形界面设计
学院 计算机科学与教育软件学院 年级.专业.班 网络16* 姓名 卟咚君 学号 1606100*** 实验课程名称 Java语言实验 成绩 实验项目名称 图形界面设计 指导老师 ** 一.实验目的 • ...
- java图形界面的监听_非专业码农 JAVA学习笔记 用户图形界面设计与实现-所有控件的监听事件...
用户图形界面设计与实现-监听事件 System.applet.Applet (一)用户自定义成分 1.绘制图形 Public voit piant(Ghraphics g){ g.drawLine等 ...
- JAVA图形界面设计
图形界面设计 1 Java Swing 概述 图形化界面(Graphics User Interface,GUI)是指采用图形方式显示的计算机操作用户界面. 通过图形化界面,用户和程序之间可以方便地进 ...
- java 图形界面设计,使用JPanel、JFrame 绘图,图形界面设计入门演示,各种主要绘图方法以及图片、文字插入
那什么是JPanel?JFrame 又是什么呢?让我们先来了解一下他们的区别吧: JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel ...
- JAVA-关于计算器的简单图形界面设计例子(不实现功能)
对于刚刚学习JAVA的小伙伴们来说,对图形界面设计肯定不陌生,我们可以利用javax.swing类库来进行图形界面的简单设计. 下面我们用JAVA图形界面设计的相关基础知识来实现一个简易计算器的界面( ...
- 详解使用NetBeans IDE 8.2进行可视化图形界面设计——高仿QQ登录界面
目录 前言 QQ登录界面的设计与实现 1.新建一个Java项目 2.在任意包下新建一个JFrame窗体类 3.添加图片 4.设置账号文本框(JTextField)与密码框(JPasswordField ...
- Python学习:图形界面设计01
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: Python实现输入电影名字自动生成豆瓣评论词云图 ...
- 软件UI图形界面设计常用软件
学习UI图形界面设计,常用的几个软件 分别是Photoshop.Illustrator.fireworks. Photoshop,Illustrator ,coreldraw,freehand,Fla ...
最新文章
- python - 异常处理
- lmdb简介——结合MVCC的B+树嵌入式数据库
- python 复现AC自动机
- 大数据分析应用在哪些方面上
- VisualBox安装Ubuntu18.04后续操作:换源、IP、LAMP、phpmyadmin
- java类中代码执行顺序
- Golang优化之内存对齐
- python开发bi报表_BI报表分析和数据可视化,推荐这三个开源工具!
- Windows XP 系统优化全攻略(转)
- 机器学习笔记-激活函数关于零点对称问题
- 用php语言说句情话,说给女朋友的感动情话50句
- 什么无线蓝牙耳机延迟低?延迟低的无线蓝牙耳机推荐
- 香侬专栏 | 独家对话斯坦福大学计算机系教授Percy Liang
- Java + Swing + MySQL实现图书管理系统
- 【ArcGIS Pro二次开发】(17):打开GDB、SHP、CAD等各种数据
- Mulesoft自学教程(含文档,AnypointStudio开发工具资料)
- iOS中文件连接群晖服务器,教你使用群晖怎么在ios的“家庭‘’App(HomeKit)里添加Hom...
- 简述适配器的概念、作用以及主机适配器的概念
- Motorola和TI的SPI的区别
- uip_process分析
热门文章
- 人生感悟的句子,句句经典正能量!
- 在VScode中导入anaconda中已安装好的库
- Python C++ 面经
- 火花塞报警能用计算机消除,更换火花塞后发动机故障报警怎么办
- C++【坑人神器:绝地求生小游戏4.0】全新时代!
- iOS textfield textview 三方键盘的联想 或者 iPad键盘undo导致崩溃
- ANA* 路径规划算法基本原理
- Mac版ideaDebug调试快捷键
- html5苹果x底部满屏,iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配...
- Electron require未定义