java学习笔记图形程序设计及GUI应用小结(1)


Swing介绍

Swing是不对等基于GUI工具箱的正式名字。它已是Java基础类库(Java Foundation Class)JFC的一部分了。Swing没有完全替代AWT,而是基于AWT架构之上。Swing是指“被绘制的”用户界面类;AWT是指像事件处理这样的窗口工具箱的底层机制。


Swing特点:

1、Swing拥有一个丰富、便捷的用户界面元素集合。

2、Swing对底层平台依赖的很少,因此与平台相关的bug少。

3、Swing给予不同平台的用户一致的感觉。


Java为GUI提供的对象都村在java.awt和javax.Swing两个包中。

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

GLI:(Command Line User Interface)命令行用户接口。常见的Dos命令行操作,要记忆命令,操作补直观。

           举例:比如创建文件夹,或者删除文件夹等。


java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能(依赖平台,跨平台性补              是很好)。属重量级控件。提供了一些窗口当中所使用的组件。

javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由JAVA实现。增强了               移植性,属轻量级控件。(用他开发的组件、图形化界面在任何系统下显示都相同。属轻量级)


AWT中的对象

Component类:是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按         钮、复选框、和滚动条都是组件示例。

Container类:可以包含其他AWT组件的组件。


创建图形化界面大体步骤:

1、创建Frame窗体。

2、对窗体进行基本设置,如大小,位置,布局。

3、定义组件。

4、将组件通过窗体的add方法添加到窗体中。

5、让窗体显示,通过setVisible(true)。


GUI组件详述

一、框架

Java中,框架被设计为放置组件的容器,可以将菜单栏和其他的用户界面元素放置在其中。在JFrame中有四层面板。其中根面板、层级面板和玻璃面板人们并不太关心;它们是用来组织菜单栏和内容窗格以及实现观感的。Swing程序员最关心的是内容窗格。

在Java中,顶层窗口被称为框架(frame)。在AWT库中有一个称为Frame的类,用于描述顶层窗口。这个类的Swing版本名为JFrame,他扩展于Frame类。绝大多数Swing组件类都以“J”开头。

定义一个框架类:

class SimpleFrame extends JFrame

{

public SimpleFrame()

        {setSize(300,200);}   //  设置框架大小,如果没有明确地指定框架的大小,所有框架的默认值为0*0。

}

实例框架对象:

SimpleFrame frame = new SimpleFrame();


框架方法说明:

在Java SE5.0中,可以直接调用frame.add(c)添加组件。

从JFrame的各个超类中继承了许多用于处理框架大小和位置的方法:

setLocation和setBounds方法用于设置框架的位置。

setIconImage用于告诉窗口系统在标题栏、任务切换窗口等位置显示哪个图标。

setTitle用于改变标题栏的文字。

setResizable利用一个boolean值确定框架的大小是否允许用户改变。

booleanisResizable()

voidsetResizable(boolean b):获取或设置resizable属性。这个属性设置后,用户可以重新设置框架的大小。

String getTitle()

VoidsetTitle(String s)  获取或设置title属性,确定框架标题栏中的文字。

ImagegetIconImage()

voidsetIconImage(Image image)  获取或设置iconImage属性,这个属性确定框架的图标。

booleanisUndecorated() 1.4

voidsetUndecorated(boolean b) 1.4 获取或设置undecorated属性。这个属性设置后,框架显示中将没有标题栏或关闭按钮这样的装饰。在框架显示之前必须调用这个方法。

intgetExtendedState() 1.4

voidsetExtendedState(int state) 1.4 获取或设置窗口状态(包括五种:)

1、Frame.NORMAL       2、Frame.ICONIFIED       3、Frame.MAXIMIZED_HORIZ

4、Frame.MAXIMIZED_VERT        5、Frame.MAXIMIZED_BOTH


Java中,框架被设计为放置组件的容器,可以将菜单栏和其他的用户界面元素放置在其中。


二、显示文本

Java中所有的绘制都必须使用Graphics对象,其中包含了绘制图案、图像和文本的方法。

无论何种原因,只要窗口需要重新绘图,事件处理器就会通告组件,从而引发执行所有组件的paintComponent方法。一定不要自己调用paintComponent方法。在应用程序需要重新绘图的时候,这个方法将被自动地调用。

如果需要强制刷新屏幕,就需要调用repaint方法。对于屏幕显示来说Graphics对象的度量单位是像素。

显示文本是一种特殊的绘图。在Graphics类中有一个drawString方法调用的语法格式为:g.drawString(text,x,y);]

在框架中绘制一段文字:

public class NotHelloWorld

{

public static void main(String[] args)

        EventQueue.invokeLater(new Runnable)

        {

       public void run()

{

JFrame frame = new NotHelloWorldFrame();

frame.setTitle("NotHelloWorld");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

        }

}

class NotHelloWorldFrame extends JFrame

{

public NotHelloWorldFrame()

{

add(newNotHelloWorldComponent());

pack();

}

}

class NotHelloWorldComponent extends JComponent   // 定义文字类,继承自JComponent类

{

public void paintComponent(Graphics g)

{

g.drawString("Not a Hello,World program",75,100);    //  文字内容和位置坐标为参数

}

public Dimension getPreferredSize(){   return new Dimension(300,200);   }     //  返回文字尺寸

}


在框架中填入一个或多个组件时,如果你只想使用它们的首选大小,可以调用pack方法。

JPanel是一个可以包含其他组件的容器,但同样也可以在其上面进行绘制。


三、绘制2D图形

Java SE 1.2引入了Java2D库,要想使用Java 2D库绘制图形,需要获得一个Graphics2D类对象。这个类是Graphics类的子类。自从Java SE 2版本以来,paintComponent方法就会自动地获得一个Graphics2D类对象,我们只需要进行一次类型转换就可以了:public void paintComponent(Graphicsg){Graphics2D g2 = (Graphics2D) g; … }

在1.0的绘制方法中,采用的是整型像素坐标,而Java2D图形采用的是浮点坐标。用户可使用有意义的形式例如微米或英寸指定图形的坐标,然后在将其转换成像素,这样方便。2D库的设计者决定为每个图形类提供两个版本:一个是为那些节省空间的程序员提供的float类型的坐标,另一个是为那些懒惰的程序员提供的double类型的坐标。

Rectangle2D类,这是一个拥有两个具体子类的抽象类,这两个具体子类也是静态内部类:Rectangle2D.Float 和   Rectangle2D.Double

创建Rectangle2D.Float对象:(构造参数表示矩形的左上角位置、宽和高)

Rectangle2DfloatRect = new Rectangle2D.Float(10.0F,25.0F,22.5F,20.0F);

Rectangle2DdoubleRect = new Rectangle2D.Double(10.0,25.0,22.5,20.0)

Rectangle2D方法的参数和返回值均为double类型。例如,即使Rectangle2D.Float对象存储float类型的宽度,getWidth方法也返回一个double值。

Point2D类也有两个子类,Point2D.Float和Point2D.Double构造方法为:Point2Dp = new Point2D.Double(10,20);

构造椭圆:

通常可以知道椭圆的中心、宽和高,而不是外接矩形的定点。setFrameFromCenter方法使用中心点,但仍然要给出四个顶点中的一个因此,通常采用下 列方式构造椭圆:

Ellipse2Dellipse = new Ellipse2D.Double(centerX-width/2,center-height/2,width,height);

构造一条直线:

Line2D line =new Line2D.Double(start,end);

Line2Dline = new Line2D.Double(staartX,startY,endX,endY);


2D图形绘制方法说明:

java.awt.geom.RectangularShape 1.2

doublegetCenterX()

doublegetCenterY()

doublegetMinX()

doublegetMinY()

doublegetMaxX()

doublegetMaxY()  返回闭合矩形的中心,以及最小、最大x和y坐标值

doublegetWidth()

doublegetHeight()  返回闭合矩形的宽和高

double getX()

doublegetY()  返回闭合矩形左上角的x和y坐标。

java.awt.geom.Rectangle2D.Double 1.2

Rectangle2D.Double(doublex,double y,double w,double h)

利用给定的左上角、宽和高,构造一个矩形。

java.awt.geom.Rectangle2D.Float 1.2

Rectangle2D.Float(floatx,float y,float w,float h)

利用给定的左上角、宽和高的外接矩形,构造一个椭圆

java.awt.geom.Ellipse2D.Double 1.2

Ellipse2D.Double(doublex,double y,double w,double h)

利用给定的左上角、宽和高的外接矩形,构造一个椭圆。

java.awt.geom.Point2D.Double 1.2

Point2D.Double(doublex,double y)  利用给定坐标构造一个点。

java.awt.geom.Line2D.Double 1.2

Line2D.Double(Point2Dstart,Point2D end)

Line2D.Double(doublestartX,double startY,double endX,double endY)

使用给定的起点和终点,构造一条直线。


四、Color类

使用Graphics2D类的setPaint方法可以为图形环境上的所有后续的绘制才做选择颜色:gs.setPaint(Color.RED);      gs.drawString(“warning!”,100,100);只需将调用draw替换为调用fill就可以用一种颜色填充一个封闭图形:Rectangle2Drect=…;    g2.setPaint(Color.RED);    g2.fill(rect);

Color类用于定义颜色。java.awt.Color类中提供了13个预定义的常量代表13种标准颜色。

可以通过提供红、绿和蓝三色成分来创建一个Color对象,以达到定制颜色的目的。调用Color构造器的格式为:Color(int redness,intgreenness,int blueness) 

如例:gs.setPaint(newColor(0,128,128));   g2.drawString(“Welcome!”,75,125);

使用Graphics对象而不是Graphics2D对象,就需要使用setColor方法设置颜色。

要想设置背景色,要使用Component类中的setBackground方法,Component类是JComponent 类的祖先。

Color类中的brighter()方法和darker()方法的功能,他们分别加亮或变暗当前的颜色。

Java在SystemColor类中预定义了很多颜色的名字。在这个类中的常量,封装了用户系统的各个元素的颜色。如p.setBackGround(SystemColor.window)


Color类方法说明:

java.awt.Color 1.0

Color(int r,intg,int b)  创建一个颜色对象

java.awt.Graphics 1.0

ColorgetColor()

voidsetColor(Color c)   获取或改变当前的颜色。后续所有绘图操作使用新颜色。

java.awt.Graphics2D 1.2

PaintgetPaint()

voidsetPaint(Paint p)  获取或设置这个图形环境的绘制属性。

void fill(Shapes)  用当前的颜料填充该图形。

java.awt.Component 1.0

ColorgetBackground()

voidsetBackground(Color c)  获取或设置背景颜色。

ColorgetForeground()

voidsetForeground(Color c)  获取或设置前景颜色。


五、字体

人们可以通过字体名指定一种字体。

GraphicsEnvironment类中的getAvailableFontFamilyNames方法。这个方法将返回一个字符串型数组,其中包含了所有可用的字体名。GraphicsEnvironment类描述了用户系统的图形环境,为了得到这个类的对象,需要调用静态的getLocalGraphicsEnvironment方法:

获取当前系统允许使用的字体,返回字符串数组:

String[] fontNames = GraphicsEnvironment().getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

要想使用某种字体绘制字符,必须首先利用指定的字体名、字体风格和字体大小来创建一个Font类对象。下面是构造一个Font对象的例子:Font sansbold14 = new Font(“SansSerif”,font.BOLD,14);  (字体名、风格、大小)

字体风格有四种:font.PLAIN、font.BOLD、font.ITALIC、font.BOLD+ font.ITALIC

可以使用driveFont方法得到希望大小的字体:Font f =f1.deriveFont(14.0F); 

driveFont方法有两个重载版本。一个(有一个float参数)设置字体的大小。另一个(有一个int参数)设置字体风格。所以f.deriveFont(14)设置的是字体风格,而不是大小(其结果为斜体,因为14的二进制表示的是ITALIC,而不是BOLD)。例如:

 Font sansbold14 = new Font(“SansSerif”,Font.BOLD,14);

 g2.setFont(sansbold14);

 String message = “Hello,World!”;

 g2.drawString(message,75,100);

想要得到屏幕设备字体属性的描述对象,需要调用Graphics2D类中的getFontRenderContext方法。它将返回一个FontRenderContext类对象。可以直接将这个对象传递给Font类的getStringBounds方法:

FontRenderContextcontext = g2.getFontRenderContext();

Rectangle2Dbounds = f.getStringBounds(message,context);

getStringBounds方法将返回包围字符串的矩形。


字体方法说明:

java.awt.Font 1.0

Font(Stringname,int style,int size)  创建一个新字体对象。

StringgetFontName()  返回字体名。

StringgetFamily()  返回字体家族名。

StringgetName()  如果采用逻辑字体名创建字体,将返回逻辑字体。

Rectangle2D getStringBounds(Strings,FontRenderContext context) 1.2

返回包围这个字符串的矩形。矩形的起点为基线。矩形顶端的y坐标等于上坡度的负值。

矩形的高度等于上坡度、下坡度和行间距之和。宽度等于字符串的宽度。

LineMetricsgetLineMetrics(String s,FontRenderContext context) 1.2

返回测定字符串宽度的一个线性metrics对象。

FontderiveFont(int style) 1.2 

FontderiveFont(float size) 1.2

FontderiveFont(int style,float size) 1.2

返回一个新字体,除给定大小和字体风格外,其余与原字体一样。

java.awt.Graphics 1.0

Font getFont()

voidsetFont(Font font) 获取或设置当前字体。这种字体将被应用于后续的文本绘制操作中。

void drawstring(Stringstr,int x,int y) 采用当前字体和颜色绘制一个字符串。

java.awt.Graphics2D 1.2

FontRenderContextgetFontRenderContext()

返回这个图形文本中,指定字体特征的字体绘制环境。

voiddrawstring(String str,float x,float y) 采用当前的字体和颜色绘制一个字符串




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值