
窗口就是屏幕上的一块区域,在这块区域中,应用程序取得用户的输入,显示程序的输出。每个GUI应用程序至少要创建一个窗口,称为主窗口,它作为用户与应用程序间的主界面来提供服务。大多数应用程序也直接或者间接地创建其他窗口,来完成与主窗口相关的工作。每个窗口都在显示输出和从用户取得输入方面起着一定的作用。
窗口客户区是应用程序显示输出的部分。应用程序必须提供一个称为窗口函数的回调函数来处理窗口的输入,向客户区显示输出。
GUI应用程序的入口地址是WinMain,这是一个自定义的回调函数。
Windows的消息驱动:
创建窗口之后,就要对窗口的行为负责。是 *** 作系统告诉程序用户在窗口上的动作的。Windows不断向应用程序发送消息,通知发生了什么事情。比如用户改变了窗口大小,Windows就向这个程序发送一个消息,指明窗口新的大小。
当Windows向程序发送消息时,它调用程序中的一个函数,这个函数的参数精确地描述了Windows发送的消息。在程序中这个函数为窗口函数(Window Procedure)或消息处理函数。它是一个自定义的回调函数。SendMessage函数用于向窗口发送消息,直到目标窗口函数处理完这个消息才返回。
系统向应用程序发送消息的过程:
系统为应用程序传递所有的输入到它的各个窗口,每个窗口都关联一个窗口函数,每当这个窗口有输入时,系统调用该函数。窗口函数处理输入,然后再将控制权交给系统。
无限的消息循环:
在调用UpdateWindow函数之后,整个窗口已经显示在桌面上,程序必须准备从用户接收键盘和鼠标输入了。Windows为每个线程维护了一个消息队列,每当有一个输入发生,Windows就把用户的输入翻译成消息放在消息队列中。利用GetMessage函数可以从调用线程的消息队列中取出一个消息来填充MSG结构。如果消息队列中没有消息(即没有用户输入),这个函数会一直等待下去,直到有消息进入到消息队列为止。GetMessage函数从消息队列中取得的消息如果不是WM_QUIT,则返回非零值。一个WM_QUIT消息会促使GetMessage函数返回0,从而结束消息循环。
DispatchMessage函数分发一个消息到对应窗口的窗口函数,当它返回时,消息循环从调用GetMessage函数开始进入下一轮循环。
通常Windows程序设计者用一个switch和case结构来决定消息处理函数收到了什么消息,以及如何处理这个消息。所有消息处理函数不处理的消息都必须传给一个名为DefWindowProc的函数让Windows做默认处理,从DefWindowProc函数返回的值也必须从消息处理函数返回。否则Windows就失去了与应用程序通信的途径,也就不能再控制窗口的行为了。
WM_PAINT消息通知应用程序窗口客户区有一块或者全部变成无效,必须刷新。这意味着窗口客户区的内容必须被重画。对BeginPaint函数的调用将使整个客户区有效,然后返回设备环境句柄,在窗口的客户区显示图形和文字时需要使用这个设备环境句柄。EndPaint函数负责释放设备环境句柄,使它变得不再能用。
import javaawt;
import javaawtevent;
import javautil;
import javaxswing;
import javaxswingborderBorder;
class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private Map<String, Integer> sizes = new HashMap<String, Integer>();
private Map<String, Integer> styles = new HashMap<String, Integer>();
private Map<String, Integer> toppings = new HashMap<String, Integer>();
public MainFrame() {
sizesput("Extra Large", 10);
sizesput("Large", 8);
sizesput("Medium", 5);
sizesput("Small", 3);
stylesput("Deep Dish", 20);
stylesput("Regular", 10);
stylesput("Thin Crust", 5);
stylesput("Chicago", 3);
toppingsput("Cheese", 8);
toppingsput("Tomato", 7);
toppingsput("Peppers", 6);
toppingsput("Peperoni", 5);
thissetTitle("布局及事件处理");
thissetSize(450, 350);
thissetLayout(new BorderLayout());
thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
JLabel lblTitle = new JLabel();
lblTitlesetText("Pizzeria Juno");
lblTitlesetFont(new Font("宋体", FontBOLD, 36));
lblTitlesetHorizontalAlignment(SwingConstantsCENTER);
thisadd("North", lblTitle);
JPanel bodyPanel = new JPanel();
bodyPanelsetLayout(new GridLayout(2, 1));
thisadd("Center", bodyPanel);
JPanel listPanel = new JPanel();
listPanelsetLayout(new GridLayout(1, 3));
listPanelsetSize(200, 200);
bodyPaneladd(listPanel);
Border lineBorder = BorderFactorycreateLineBorder(ColorBLACK);
JPanel sizePanel = new JPanel();
sizePanelsetLayout(new BorderLayout());
listPaneladd(sizePanel);
JLabel sizeTitle = new JLabel();
sizeTitlesetText("Sizes");
sizePaneladd("North", sizeTitle);
JList sizeList = new JList(sizeskeySet()toArray());
sizeListsetSize(100, 100);
sizeListsetBorder(lineBorder);
sizeListsetSelectionMode(ListSelectionModelSINGLE_SELECTION);
sizePaneladd(sizeList);
JPanel stylePanel = new JPanel();
stylePanelsetLayout(new BorderLayout());
listPaneladd(stylePanel);
JLabel styleTitle = new JLabel();
styleTitlesetText("Styles");
stylePaneladd("North", styleTitle);
JList styleList = new JList(styleskeySet()toArray());
styleListsetSize(100, 100);
styleListsetBorder(lineBorder);
styleListsetSelectionMode(ListSelectionModelSINGLE_SELECTION);
stylePaneladd(styleList);
JPanel toppingPanel = new JPanel();
toppingPanelsetLayout(new BorderLayout());
listPaneladd(toppingPanel);
JLabel toppingTitle = new JLabel();
toppingTitlesetText("Toppings");
toppingPaneladd("North", toppingTitle);
JList toppingList = new JList(toppingskeySet()toArray());
toppingListsetSize(100, 100);
toppingListsetBorder(lineBorder);
toppingPaneladd(toppingList);
JTextArea txtResult = new JTextArea();
txtResultsetEditable(false);
bodyPaneladd(txtResult);
JPanel bottomPanel = new JPanel();
bottomPanelsetLayout(new GridLayout(1, 3));
thisadd("South", bottomPanel);
JLabel label1 = new JLabel("Click to complete order");
bottomPaneladd(label1);
JButton btnRingUp = new JButton("Ring up");
btnRingUpaddActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sizeListgetSelectedValue() == null) {
JOptionPaneshowMessageDialog(MainFramethis, "Please select size");
return;
}
if(styleListgetSelectedValue() == null) {
JOptionPaneshowMessageDialog(MainFramethis, "Please select style");
return;
}
if(toppingListgetSelectedValue() == null) {
JOptionPaneshowMessageDialog(MainFramethis, "Please select topping");
return;
}
float total = 0;
String size = sizeListgetSelectedValue()toString();
total += sizesget(size);
String style = styleListgetSelectedValue()toString();
total += stylesget(style);
String result = size + " Pizza, " + style + " Style";
Object[] toppings = toppingListgetSelectedValues();
for(Object topping : toppings) {
result += "\n +" + toppingtoString();
total += MainFramethistoppingsget(toppingtoString());
}
result += "\n Total: " + total;
txtResultsetText(result);
}
});
bottomPaneladd(btnRingUp);
JButton btnQuit = new JButton("Quit");
btnQuitaddActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MainFramethisdispose();
}
});
bottomPaneladd(btnQuit);
}
}
public class App {
public static void main(String[] args) {
MainFrame mainFrame = new MainFrame();
mainFramesetVisible(true);
}
}
xmanager40图形界面配置
前提:#xdpyinfo ---通过xmanager的shell执行以下该命令,name of display: localhost:100看一下ip后边的100(127001:100)
方法一:使用xmanager的xmanager-passive
{注意:本地windows防火墙一定要关闭,或者加入177端口}
1》启动:xmanager-passive
2》root用户登陆:
#vi bash_profile
export DISPLAY=cilent_ip:00 ---客户端windows的ip地址
#xclock ---可以使用这个命令测试一下
如果是应用程序图像化安装:
1、#gnome-session或者startkde----这两个命令都可以启动一个桌面,在桌面中启动应用程序
2、#/runller ----也可以直接调用应用程序安装
方法二:使用xmanager的Xbrower--》XDMCP远程桌面
{注意:本地windows防火墙一定要关闭,或者加入177端口}
1》修改:/etc/inittab --》启动模式改为图形启动:5
2》修改:/etc/gdm/customconf --》
[xdmcp]
enable=1
port=177
3》修改:/etc/X11/xdm/Xaccess --》 # any host can get a login window
4》修改:/etc/X11/xdm/xdm-config --》DisplayManagerrequestPort:0 前面加!号注释掉此行,这步必须做,然后xmanager就可以自动认出
5》linux启动xdm服务 --》# xdm 启动xdm服务,启动177端口,这一步最重要
# netstat -antup | grep 177 --测试开启
udp 0 0 :::177 ::: 4591/xdm
自动启动xdm,那么请在/etc/rcd/rclocal文件尾部加入下边xdm的路径
# which xdm
/usr/bin/xdm
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机 *** 作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
简介
如Windows是以GUI(图形界面)方式 *** 作的,因为你可以用鼠标来点击按钮来进行 *** 作,很直观。而DOS就不具备GUI,所以他只能输入命令。DOS 的这种界面叫CLI (Command line User Interface ) 命令行模式的人机接口。
GUI 是 Graphical User Interface 的简称,即图形用户界面,通常人机交互图形化用户界面设计经常读做“goo-ee”,准确来说 GUI 就是屏幕产品的视觉体验和互动 *** 作部分。
GUI 是一种结合计算机科学、美学、心理学、行为学,及各商业领域需求分析的人机系统工程,强调人—机—环境三者作为一个系统进行总体设计。
这种面向客户的系统工程设计其目的是优化产品的性能,使 *** 作更人性化,减轻使用者的认知负担,使其更适合用户的 *** 作需求,直接提升产品的市场竞争力。
GUI 即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到 GUI 在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了相关部门专门从事 GUI 的研究与设计,同业间也成立了若干机构,以互相交流 GUI 设计理论与经验为目的。随着中国 IT 产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用。
编辑本段
特点
GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行 *** 作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。
编辑本段
GUI的组成部分
桌面
在启动时显示,也是界面中最底层,有时也指代包括窗口、文件浏览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。一般的界面中,桌面上放有各种应用程序和数据的图标,用户可以依此开始工作。桌面与既存的文件夹构成里面相违背,所以要以特殊位置的文件夹的参照形式来定义内容。比如在微软公司的Windows XP系统中,各种用户的桌面内容实际保存在系统盘(默认为C盘):\Documents and Settings\[用户名]\桌面 文件夹里。
墙纸,即桌面背景。可以设置为各种和各种附件,成为视觉美观的重要因素之一。
视窗
应用程序为使用数据而在图形用户界面中设置的基本单元。应用程序和数据在窗口内实现一体化。在窗口中,用户可以在窗口中 *** 作应用程序,进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。
在窗口中,根据各种数据/应用程序的内容设有标题栏,一般放在窗口的最上方,并在其中设有最大化、最小化(隐藏窗口,并非消除数据)、最前面、缩进(仅显示标题栏)等动作按钮,可以简单地对窗口进行 *** 作。
单一文件界面
在窗口中,一个数据在一个窗口内完成的方式。在这种情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数据,将相应生成新的窗口。因此窗口数量多,管理复杂。
多文件界面
在一个窗口之内进行多个数据管理的方式。这种情况下,窗口的管理简单化,但是 *** 作变为双重管理。
标签
多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。
上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多是单文件界面,所以无所谓单一/多文件界面的称呼问题。
菜单
将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。重要程度一般是从左到右,越往右重要度越低。命定的层次根据应用程序的不同而不同,一般重视文件的 *** 作、编辑功能,因此放在最左边,然后往右有各种设置等 *** 作,最右边往往设有帮助。一般使用鼠标的第一按钮进行 *** 作。
即时菜单(又称功能表)
与应用程序准备好的层次菜单不同,在菜单栏以外的地方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置的不同,菜单内容即时变化,列出所指示的对象目前可以进行的 *** 作。
图标
显示在管理数据的应用程序中的数据,或者显示应用程序本身。
数据管理程序,即在文件夹中用户数据的管理、进行特定数据管理的程序的情况下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联的应用程序的图案。另外,点击数据的图标,一般可以之间完成启动相关应用程序以后再显示数据本身这两个步骤的工作。
应用程序的图标只能用于启动应用程序。
按钮
菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按钮。
应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。
编辑本段
实现方法
针对特定的图形设备输出接口,自行开发相关的功能函数。
购买针对特定嵌入式系统的图形中间软件包。
采用源码开放的嵌入式GUI系统。
使用独立软件开发商提供的嵌入式GUI产品。
编辑本段
GUI 准则
减少用户的认知负担
保持界面的一致性
满足不同目标用户的创意需求
用户界面友好性
图标识别平衡性
图标功能的一致性
建立界面与用户的互动交流
更为人性化的视觉优化
更具识别性的图标及其他元素
更具可 *** 控性和扩充性的使用易用性
更具有企业品牌特色的视觉识别性
手机通信移动产品
编辑本段
GUI 应用领域
手机通讯移动产品
电脑 *** 作平台
软件产品
PDA产品
数码产品
车载系统产品
智能家电产品
游戏产品
产品的在线推广
编辑本段
竞赛
GUI锦标赛(The GUI Championships)是一个每两年举行一次的国际性的界面竞赛, 被邀请的界面设计师们来自世界各地参加几种不同类别的W
2008
indows GUI界面竞赛, 你将有机会获得大赛设立的丰厚奖金和同行们的赞赏“图形用户界面大奖赛”是国际性的桌面美化大赛,前身是“图形用户界面奥林匹克”,由 Neowin、Lockergnome、deviantART、Betanews、WinCustomize五大IT 社区联合主办,属于微软认证的金牌合作计划。全世界的计算机桌面图形艺术天才们汇聚一堂,向我们展示他们最高的创作成就。大赛于 2005 年由于赞助资金问题停赛一年,今年的比赛便显得稍稍有些冷清。本次大赛共有世界各国 26 个团队参加,参与 9 个项目,争夺共计一万二千美元的奖金(包括 X-Box 360、Nvidia 显卡在内的实物奖品)。今年的比赛集中在桌面背景(Wallpaper)、桌面图标(Icon)、桌面主题(Visual Style)三个方面,而比赛项目的类型则分为“最实用”(Most Usable)、“最具原创性”(Most Original)、“综合最佳”(Best Overall)。
2008GUI锦标赛我国获奖情况
本届参赛作品中我国设计师获得了1金3银3铜的好成绩。
我国设计师iconboy的作品Non-Mainstream2008 获得了综合最佳桌面图标奖二等奖(Best Overall Icon Package Winners 2nd Place),
最实用桌面图标奖二等奖(Most Usable Icon Package Winners 2nd Place)。
制作一个类似于QQ登陆的界面,以下数据库部分,你可以自己修该下,默认为Access;
import javaawt;
import javaxswing;
import javaawtevent;
import javasql;
class JieMian extends JFrame;
{
JFrame f;
JLabel lb1;
JLabel lb2;
JTextField tf;
JPasswordField pwd;
JButton b1;
JButton b2;
JPanel p1;
JPanel p2;
Connection con;
Statement stmt;
String use;
char passw[]=new char[10];
ResultSet rs;
String k1,k2;
public void init()
f=new JFrame("登陆界面");
init();
b1addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ei)
{
try
{
ClassforName("sunjdbcodbcJdbcOdbcDriver");
con=DriverManagergetConnection("jdbc:odbc:dat");
stmt=concreateStatement();
use=tfgetText();
passw=pwdgetPassword();
String passww=new String(passw);
rs=stmtexecuteQuery("select from user where 用户名='"+use+"' and 密码='"+passww+"'");
while(rsnext())
{
Systemoutprintln(k1=rsgetString("用户名"));
Systemoutprintln(k2=rsgetString("密码"));
}
if(k1equals(use)&&(k2equals(passww)))
{
JOptionPaneshowMessageDialog(null,"用户登陆成功");//登陆成功
}
else
{
JOptionPaneshowMessageDialog(null,"请检查用户信息,登陆失败");//登录失败
}
rsclose();
stmtclose();
conclose();
}
catch (Exception ey){JOptionPaneshowMessageDialog(null,"请检查用户信息,登陆失败");}
}
});
fsetLayout(new GridLayout(2,1,10,5));
fsetVisible(true);
fsetSize(210,150);
fsetLocation(550,300);
fsetResizable(false);
fsetDefaultCloseOperation(EXIT_ON_CLOSE);
b2addActionListener(new ActionListener(){//58
public void actionPerformed(ActionEvent e){
fsetVisible(false);
}
});
}
}
public class DengLu
{
public static void main(String[] args)
{
new JieMian();
}
}。
以上就是关于Windows图形界面全部的内容,包括:Windows图形界面、java编写一个图形界面程序、如何用xmanager启动Linux上的图形界面程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)