`

实验 7 建立图形用户界面

阅读更多
一、实验目的
   了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用 Java 的事件处理机制。
二、实验要求
    1. 掌握在 Applet 容器中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。
    2. 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
    3. 掌握编写独立运行的窗口界面的方法。
    4. 了解 Java Swing 组件的使用方法。
    5. 了解对话框的使用方法。
三、实验内容
(一)创建图形用户界面
图形用户界面(Graphic User Interface ,简称GUI)是为方便用户使用设计的窗口界面,在图
形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。组件(Component)是构成GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等。通过容器的add 方法把组件加入到容器中。
1. 在Applet 中添加标签、按钮并使用网格布局
• 程序功能:在Applet 容器中添加组件标签、按钮,并使用网格布局管理器排列组件在容器中的位置。
• 编写KY7_1.java 程序文件,源代码如下。
import java.awt.*;
import java.applet.Applet;
public class KY6_1 extends Applet {
Label l1;
Button b1, b2, b3, b4, b5, b6;
public void init() {
setLayout(new GridLayout(3,3)); // 设置网格布局(3 行3 列共9 个网格)
l1=new Label("标签1");
b1 = new Button("按钮1");
b2 = new Button("按钮2");
b3 = new Button("按钮3");
b4 = new Button("按钮4");
add(l1);
add(b1);
add(b2);
add(b3);
add(new Label());
add(b4);
add(new Button("按钮5"));
add( new Button("按钮6"));
add(new Label("标签2"));
}
}
• 编译程序KY7_1.java。
• 编写显示Applet 的页面文件KY7_1.html
2. 在面板中添加组件
• 程序功能:在Applet 中添加面板容器,并分别在Applet、面板容器中添加组件并使用不同的布局管理方式。
• 编写KY7_2.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.Color;
import java.applet.Applet;
public class KY6_2 extends Applet {
public void init() {
//设置最底层的 Applet 容器为顺序布局
setFont(new Font("Arial",Font.PLAIN,20));
Label l=new Label("这是最底层的 Applet 容器中的标签",Label.CENTER);
add(l);
Panel panel1=new Panel();
add( panel1);
panel1.setBackground(Color.blue);
panel1.setForeground(Color.red);
panel1.setLayout(new BorderLayout());//设置边界布局
panel1.add("North", new Button("北"));
panel1.add("South", new Button("南"));
panel1.add("East", new Button("东"));
panel1.add("West", new Button("西"));
panel1.add("Center", new Label("这是在 Panel1 面板 中部添加的标签"));
Panel panel2=new Panel();
add( panel2);
panel2.setLayout(new GridLayout(3,1)); //设置网格布局
Choice c=new Choice ();//创建下拉式列表
c.addItem("北京");
c.addItem("上海");
c.addItem("天津");
Label l1=new Label("这是在 Panel2 面板中的标签");
Button b1=new Button("Panel2 中的按钮");
panel2.setBackground(Color.green);
panel2.add(l1);
100
panel2.add(b1);
panel2.add(c);
}
}

• 编译程序KY7_2.java。
• 编写显示Applet 的页面文件KY7_2.html
(二)了解事件处理机制
在图形用户界面中,程序和用户的交互是通过组件响应各种事件来实现的。例如,用户单击了一个按钮,意味着发生了按钮的单击事件;选中下拉框中的一个选项,意味着发生了一个选项事件。在Java 中能产生事件的组件叫做事件源,如按钮。如果希望对单击按钮事件进行处理,可给事件源(按钮)注册一个事件监听器(如包含按钮的容器),如同签订了一个委托合同,当事件源发生事件时,事件监听器就代替事件源对发生的事件进行处理,这就是所谓的委托事件处理机制。
1. 单击按钮的事件处理程序
• 程序功能:使用手工布局设置组件标签、按钮的位置,为按钮编写单击事件处理方法。当用户用鼠标单击按钮时,会听到一声响声。
• 编写KY7_3.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class KY6_3 extends Applet implements ActionListener { // 实现动作事件监听
接口
public void init() {
setLayout(null);//关闭默认的顺序管理布局
Label l=new Label("按一下按钮可听到响声!", Label.CENTER);
add(l);
l.setBounds(40,10,150,30);
Button b=new Button("按钮");
add(b);
b.setBounds(60,50,60,40);
b.addActionListener (this); // 注册事件源的动作监听者
}
public void actionPerformed(ActionEvent e) {//实现单击事件接口的方法
Toolkit.getDefaultToolkit ().beep(); //单击事件发生时作出的反应
}
}
• 编译程序KY7_2.java
• 编写显示Applet 的页面文件KY7_3.html
2. 选择复选框和单选框按钮的事件处理程序
• 程序功能:在Applte 上创建复选框、单选框、文本区域、单行文本框等组件,并实现根据用户输入的10 进制数,选择不同选项可转换为2、8、16 进制数。
• 编写KY7_4.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class KY6_4 extends Applet implements ItemListener {
TextArea area=new TextArea(6,30);//创建文本区
String Item[]={"2 进制","8 进制","16 进制","10 进制"};
Checkbox cb[]=new Checkbox[5];
Checkbox radio[]=new Checkbox[5];
Label l=new Label("输入10 进制数");
TextField TF=new TextField(6);//创建单行文本框
public void init() {
add(l);add(TF);
add(area);
add(new Label(" 请选择进制:"));
for(int i=0; i<4; i++) {
cb[i]=new Checkbox(Item[i]);
add(cb[i]);
cb[i].addItemListener(this);
}
CheckboxGroup cbGroup=new CheckboxGroup();//创建单选框
add(new Label("请选择进制:"));
for(int i=0; i<4; i++) {
radio[i]=new Checkbox(Item[i],cbGroup,false);
add(radio[i]);
radio[i].addItemListener(this);
}
}
public void itemStateChanged(ItemEvent e) {
int x=Integer.parseInt(TF.getText());
if (e.getItem ()=="2 进制")
area.append ("你选择的是"+e.getItem ()+ Integer.toBinaryString(x)+"\n");
if (e.getItem ()=="8 进制")
area.append ("你选择的是"+e.getItem ()+ Integer.toOctalString(x)+"\n");
if (e.getItem ()=="16 进制")
area.append ("你选择的是"+e.getItem ()+Integer.toHexString(x)+"\n");
if (e.getItem ()=="10 进制")
area.append ("你选择的是"+e.getItem ()+x+"\n");
}
}
• 编译程序KY7_4.java。
• 编写显示Applet 的页面文件KY7_4.html
(三)建立独立运行的窗口界面并使用匿名类
最常使用的包含组件的容器是窗口,在Java 中窗口由Frame 类生成。
1. 创建一个窗口界面
• 程序功能:创建一个具有关闭功能的空白窗口。
• 编写KY7_5_W.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
public class KY7_5_W {
public static void main(String[] args) {
new KY7_5_W();
}
KY7_5_W(){
Frame f=new Frame("初始窗口");//创建窗口对象
f.setSize(350,200);//设置窗口大小
f.setVisible(true);//设置窗口是可视的
f.addWindowListener(new WindowAdapter() {//为窗口添加窗口事件适配器
public void windowClosing(WindowEvent e) {//关闭窗口事件的方法
System.exit(0);
}
};
}
}
• 编译并运行程序
2. 在窗口中添加组件
• 程序功能:在窗口中添加组件。
• 编写KY7_6.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
public class KY7_6 extends Frame implements ActionListener {
Button btn1, btn2;
TextField f,tf1,tf2;
TextArea Area;
KY7_6() {
super("添加组件的窗口");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setSize(350,250); //设置窗口大小
setLocation(200,200);//设置窗口显示位置
setFont(new Font("Arial",Font.PLAIN,12)); //设置字体
setLayout(new FlowLayout());
Area=new TextArea (6,40);
tf1=new TextField(10); tf2=new TextField(10);
btn1=new Button("显示"); btn2=new Button("退出");
f=new TextField(20);
add(Area); add(new Label("用户名"));
add(tf1); add(new Label("电话"));
add(tf2); add(f); add(btn1); add(btn2);
tf1.addActionListener(this); tf2.addActionListener(this);
btn1.addActionListener(this); btn2.addActionListener(this);
show();
}
public static void main(String args[]) {
new KY7_6();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==btn1)
f.setText("你按下了“" + e.getActionCommand() + "”按钮");
if (e.getSource()==tf1)
Area.append("用户名:"+tf1.getText()+"\n");
if (e.getSource()==tf2)
Area.append("电 话:"+tf2.getText()+"\n");
if (e.getSource()==btn2) {
for (int i=0; i<100000000; i++);
dispose();//只关闭当前窗口,注销该对象
}
}
}
• 编译并运行程序
3. 为窗口添加菜单
• 程序功能:在窗口中添加菜单栏,在菜单栏添加菜单项,并添加下拉菜单和2 级菜单,通过选择菜单项可以执行不同操作,如“打开”可打开KY6_6 类生成的窗口。
• 编写KY7_7.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
public class KY7_7 extends Frame implements ActionListener {
Panel p=new Panel();
Button b=new Button("退出");
MenuBar mb=new MenuBar(); // 以下生成菜单组件对象
Menu m1=new Menu("文件");
MenuItem open=new MenuItem("打开");
MenuItem close=new MenuItem("关闭");
MenuItem exit=new MenuItem("退出");
Menu m12=new Menu("编辑");
MenuItem copy=new MenuItem("复制");
MenuItem cut=new MenuItem("剪切");
MenuItem paste=new MenuItem("粘贴");
Menu m2=new Menu("帮助");
MenuItem content=new MenuItem("目录");
MenuItem index=new MenuItem("索引");
MenuItem about=new MenuItem("关于");
KY7_7() {
super("添加菜单的窗口");
setSize(350,200);
add("South",p);
p.add(b);
b.addActionListener(this);
m1.add(open); // 将菜单项加入到菜单m1 中
m1.add(close);
m1.addSeparator(); //在菜单中添加分隔条
m1.add(exit);
open.addActionListener(this); //给菜单项open 注册事件监听器
exit.addActionListener(this);
mb.add(m1); // 将菜单m1 加入到菜单栏mb 中
m12.add(copy); m12.add(cut); m12.add(paste);
m1.add(m12);//将m12 作为2 级菜单添加到m1 菜单项中
m2.add(content); m2.add(index); m2.addSeparator(); m2.add(about);
mb.add(m2);
setMenuBar(mb); // 设置菜单栏为mb
show();// 显示组件
}
public static void main(String args[]) {
new KY7_7();
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand()=="退出")
System.exit(0);
if (e.getActionCommand()=="打开")
new KY7_6();
}
}
• 编译并运行程序

(四)使用 Swing 组件
在Java 中,能够实现图形用户界面的类库有两个:java.awt 和javax.swing。前者称为抽象窗口工具库AWT(Abstract Windows Toolkit),后者是Java 基础类库JFC(Java Foundation Classes)
的一个组成部分,它提供了一套功能更强、数量更多、更美观的图形用户界面组件。Swing 组件名称和AWT 组件名称基本相同,但以J 开头,例如AWT 按钮类的名称是Button,在Swing 中的名称则是JButton。
1. 在 JApplet 中添加 Swing 组件
• 程序功能:在 JApplet 中添加 3 个带有图片的按钮和一个带有图片的标签。
• 准备图片文件:在当前目录下建立一个 image 文件夹,存放 4 个图片文件,例如
• PreviousArrow.gif。
• 编写 KY7_8.java 程序文件,源代码如下。
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Color;
    public class KY7_8 extends JApplet {
      Container pane;
     JPanel panel1,panel2;
     JButton button1,button2,button3;
     JLabel label;
        public void init() {
       pane=getContentPane();
       panel1=new JPanel(new FlowLayout());
       panel2=new JPanel(new FlowLayout());
       ImageIcon icon = new ImageIcon("image/PreviousArrow.gif"," ");
       button1=new JButton(icon);
       button2=new JButton(new ImageIcon("image/go.GIF"));
       button3=new JButton(new ImageIcon("image/NextArrow.gif"));
       label=new JLabel("图像标签",
          new ImageIcon("image/Candl02.gif"),SwingConstants.CENTER);
       pane.setBackground(new Color(255,255,200));
       panel1.setBackground(new Color(255,255,104));
       panel2.setBackground(new Color(255,255,214));
       button1.setToolTipText("向上翻页按钮");
       button2.setToolTipText("跳转按钮");
       button3.setToolTipText("向下翻页按钮");
       pane.add("North",panel1);
       pane.add(panel2,BorderLayout.SOUTH);
       panel1.add(button1);
       panel1.add(button2);
       panel1.add(button3);
       panel2.add(label);
     }
   }
• 编译 KY7_8.java。
• 编写显示 KY7_8.class 的页面文件。
• 使用 appletviewer 查看程序结果

2. 在JFrame 窗口中添加组件
• 程序功能:创建JFrame 窗口,并在其中添加工具栏。
• 准备图片文件: 在当前目录下建立一个image 文件夹, 存放3 个图片文件, 例如
• PreviousArrow.gif。
• 编写KY7_9.java 程序文件,源代码如下。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class KY7_9 extends JFrame implements ActionListener {
JButton button1,button2,button3;
JToolBar toolBar;
JTextArea textArea;
JScrollPane scrollPane;
JPanel panel;
public static void main(String[] args) {
new KY7_9();
}
public KY7_9() {
super("带有工具栏按钮的窗口");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
button1=new JButton(new ImageIcon("image/PreviousArrow.gif"));
button2=new JButton(new ImageIcon("image/go.GIF"));
button3=new JButton(new ImageIcon("image/NextArrow.gif"));
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
toolBar=new JToolBar();
toolBar.add(button1);
toolBar.add(button2);
toolBar.add(button3);
textArea=new JTextArea(6,30);
scrollPane=new JScrollPane(textArea);
panel=new JPanel();
setContentPane(panel);
panel.setLayout(new BorderLayout());
panel.setPreferredSize(new Dimension(300,150));
panel.add(toolBar,BorderLayout.NORTH);
panel.add(scrollPane,BorderLayout.CENTER);
pack();
show();
}
public void actionPerformed(ActionEvent e) {
String s="";
if (e.getSource()==button1)
s="左按钮被单击\n";
else if (e.getSource()==button2)
s="中按钮被单击\n";
else if (e.getSource()==button3)
s="右按钮被单击\n";
textArea.append(s);
}
}
• 编译KY7_9.java。
• 运行KY7_9.class
(五)使用自定义对话框与内部类
对话框是GUI 中很常见的窗口对象,有着广泛的应用。对话框和普通窗口最大的不同就是对话框是依附在某个窗口上,一旦它所依附的窗口关闭了,对话框也要随着关闭。Java 提供了Dialog 类用于制作自定义对话框,当需要改变一些数据或需要一个提示窗口时可使用自定义对话框。
• 程序功能:创建一个带有文本区及“对话框”按钮的父窗口,单击“对话框”按钮可打开一个自定义对话框,从中可以定义行和列的数值,关闭对话框其设置的设置会显示在父窗口的文本区中。
• 编写KY7_10.java 程序文件,源代码如下。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class KY6_10 extends JFrame implements ActionListener {
int row=10, col=40;
JPanel p1=new JPanel(), p2=new JPanel();
JTextArea ta=new JTextArea("文本区行数:"+row+" 列数:"+col, row, col);
JScrollPane scrollPane=new JScrollPane(ta);
Button exit=new Button("关闭");
Button dialog=new Button("对话框");
JPanel panel=new JPanel();
KY7_10() {
setContentPane(panel);
setTitle("带有对话框的父窗口");
panel.setPreferredSize(new Dimension(500,200));
panel.setLayout(new BorderLayout());
panel.add("Center", p1); panel.add("South", p2);
p1.add(scrollPane);
p2.add(exit); p2.add(dialog);
exit.addActionListener(this);
dialog.addActionListener(this);
pack();
show();
//setVisible(true);
}
public static void main(String args[]) {
new KY7_10();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==exit)
System.exit(0);
else {
MyDialog dlg=new MyDialog(this, true);
dlg.show();
}
}
class MyDialog extends Dialog implements ActionListener {
Label label1=new Label("请输入行数");
Label label2=new Label("请输入列数");
TextField rows=new TextField(50);
TextField columns=new TextField(50);
Button OK=new Button("确定");
Button Cancel=new Button("取消");
MyDialog(KY7_10 parent, boolean modal) {
super(parent,modal);
setTitle("自定义对话框");
setSize(260,140);
setResizable(false);
setLayout(null);
add(label1);
add(label2);
label1.setBounds(50,30,65,20);
label2.setBounds(50,60,65,20);
add(rows);
add(columns);
rows.setText(Integer.toString(ta.getRows()));
columns.setText(Integer.toString(ta.getColumns()));
rows.setBounds(120,30,90,20);
columns.setBounds(120,60,90,20);
add(OK);
add(Cancel);
OK.setBounds(60,100,60,25);
Cancel.setBounds(140,100,60,25);
OK.addActionListener(this);
Cancel.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==OK) {
int row=Integer.parseInt(rows.getText());
int col=Integer.parseInt(columns.getText());
ta.setRows(row);
ta.setColumns(col);
ta.setText("文本区行数:"+row+" 列数:"+col);
show();
}
dispose();
}
}
}
• 编译并运行程序


分享到:
评论

相关推荐

    java实验报告之图形用户界面程序设计与 AWT/Swing组件

    1.熟悉Java图形用户界面的设计原理和程序结构; 2.能设计符合问题要求的图形用户界面程序; 3.熟悉Java AWT、swing组件的功能; 4.掌握常用组件的事件接口; 5.会应用AWT、swing组件进行应用程序设计。 二、实验内容...

    java图形用户界面

    实验内容:创建简易聊天室(ChatRoom)的图形用户界面,并创建GUI 事件处理器

    多媒体技术课程设计与实验辅导第四章 图形用户界面

    多媒体 MATLAB 图形用户界面 GUI 多媒体 MATLAB 图形用户界面 GUI 多媒体 MATLAB 图形用户界面 GUI

    图形用户界面.docx

    2) 掌握基本图形的绘制,可以使用不同颜色,字体,线条进行绘制 3) 掌握简单的事件处理机制 4) 掌握几种事件处理机制:鼠标事件、窗口事件 5) 掌握边缘布局管理器,流式布局管理器 6) 掌握几种基本的Swing组件 ...

    基于图形用户界面GUI和MATLAB 内嵌的相关函数的虚拟实验室

    本文通过MATLAB 提供的图形用户界面GUI和MATLAB 内嵌的相关函数,设计完成控制系统改进根轨迹绘制与频域综合分析仿真演示界面。应用实例表明,该界面可操作性好,参数设置方便,输出结果直观准确,具有较强的教学、...

    西南科技大学Java程序设计与实践 实验四 GUI实验实验报告及源码

    练习面向对象的图形用户界面设计、界面布局、事件设计方 法。 二、实验内容: 设计一个类似Windows计算器的Application应用程序。 三、实验要求: 1、采用Java Application方式建立应用程序框架; 2、仿照Windows...

    实验九 图形用户界面GUI(文档中包含可执行源码)

    一、实验目的与要求: (简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。) 1、目的 1.熟悉GUI基本容器JFrame、JApplet、JDialog应用的不同; 2.熟悉布局管理的作用及其使用方法; 3.熟悉常用...

    JAVA界面实验报告

    java 做的界面 实验报告 适合刚开始学习java的同学 主要是登录界面

    java课设实验报告(聊天程序+白板程序).docx

    1. 用Java图形用户界面编写聊天室服务器端和客户端, 支持多个客户端连接到一个服务器。每个客户端能够输入账号。 2. 可以实现群聊(聊天记录显示在所有客户端界面)。 3. 完成好友列表在各个客户端上显示。 4. 可以...

    使用RSA和DES保护的Socket通信(有图形界面)

    基本要求:将DES加密算法应用于网络通信,使用RSA算法自动分配密钥,设计好界面,可验证自动生成的密钥和加解密正确的结果。 具体实现要求:客户端和服务器建立连接后,客户端生成一个随机DES密钥;服务器生成一个...

    Windows系统中多种隐藏超级用户方法一、如何在图形界面建立隐藏的超级用户

    Windows系统中多种隐藏超级用户方法一、如何在图形界面建立隐藏的超级用户

    网络程序设计综合实验(聊天程序编写)

    ②服务端通过图形用户界面实现对服务器的控制,负责维护用户帐户和用户群,并维护用户信息、维持客户端之间的端对端通信和群聊通信、适时维护用户在线信息,并能够发送广播消息。 2、增加尽可能多的功能,用户界面...

    JAVA实验报告

    (一)创建图形用户界面 32 (二)了解事件处理机制 34 (三)建立独立运行的窗口界面并使用匿名类 36 (四)使用 Swing 组件 39 (五)使用自定义对话框与内部类 41 实验6 图形处理 44 一、实验目的 44 二、实验...

    《Java基础》实验题和课程设计补充题.doc

    《Java基础》实验题和课程设计补充题 《Java基础》课程实验题 专业:计算机科学与技术、软件工程、网络工程(XX年级起)教材:《Java程序设计实用教 程(第4版)》 第6章图形用户界面 实验目的、要求和题意详见教材实验6。...

    实验7 网络程序设计综合实验

    ②服务端通过图形用户界面实现对服务器的控制,负责维护用户帐户和用户群,并维 护用户信息、维持客户端之间的端对端通信和群聊通信、适时维护用户在线信息,并能够发 送广播消息。 2、增加尽可能多的功能,用户界面...

    Java案例水果超市管理系统

    Java案例水果超市管理系统Swing实现。使用了分层原理进行了分层操作。具体要求如下:完成水果超市管理系统功能,表格可以显示...一、实验名称: GUI(2)二、实验目的:通过实验掌握图形用户界面的创建和布局方法。

    操作系统课程设计——生产者消费者问题Java图形界面动态演示

    设计目的:通过研究Linux 的进程机制和信号量实现生产...4) 采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态。提示:(1) 有界缓冲区可用数组实现。代码有详细中文注释,简单易懂

    Java实验报告(房屋销售管理信息系统的设计与实现_)

    图形用户界面(Graphics User Interface,缩写GUI)是指以图形的显示方式与用户实现交互操作的应用程序界面,设计具有GUI特征的应用程序被称为GUI应用程序设计。Java提供了十分完善的图形用户界面功能,使得软件开发...

    AutoCAD实验报告.doc

    实验目的: 了解AutoCAD的用户界面,基本操作和基础知识并能够进行绘图环境的设置。 2. 实验内容: 掌握创建、打开、保存图形文件的方法,规划并管理好图形中将要使用的图层,以 方便显示和修改图形内容;指定单位...

    嵌入式linux arm9 S3C2440实验项目指导书-迅通程式嵌入式培训中心

    主要内容涵盖嵌入式Linux平台开发环境建立和开发工具使用,包括Linux基础编程、ARM开发板硬件接口设计、文件系统和应用程序设计、驱动程序开发、嵌入式图形用户界面的开发方法,以及Linux内核移植等核心实验和行业...

Global site tag (gtag.js) - Google Analytics