Java核心技术:卷1笔记[5] 图形编程

来源:互联网 发布:网络谐音词大全 编辑:程序博客网 时间:2024/06/08 09:57
 

1.Java中的顶层窗口被称为框架,在Swing中为JFrame,它从AWT中的Frame类扩展而来。JFrame是少数几个不绘制在画布上的Swing组件之一。因此它的修饰部件(按钮、标题栏、图标等)是通过用户的窗口系统,而非Swing绘制的。

2.框架在建立时是不可见的,这使得程序员有机会在框架初次显式前为其增添一些组件。为了显式框架需要调用其show方法。

3.默认情况下,当用户关闭一个框架时,该框架会隐藏起来,但程序不会终止。可以定义用户关闭框架时的响应动作,如让程序退出:frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

4.设定框架位置:setLocation(x,y)

       重新设定位置及大小:setBounds(x,y,width,height)

       把框架设为最大:frame.setExtendedState(Frame.MAXIMIZED_BOTH)

5.得到屏幕大小:

              Toolkit kit = Toolkit.getDefaultToolkit();

              Dimension screenSize = kit.getScreenSize();

              int w= screenSize.width;

              int h= screenSize.height;

       设定框架图标:

              Image img=kit.getImage(“icon.gif”);

              setIconImage(img);

6.添加组件至容器内容窗格

       Container contentPane = frame.getContentPane();

       Component c=…;

       contentPane.add(c);

       如果只需在框架中显式一个Swing组件,可以这样:

       JComponent c=…;

       frame.setContentPane(c);

7.把一个普通的JPanel添加到内容窗格中是没有什么意义的,它什么也不做。要使它变得有意义必须使用继承来创建一个新类,然后通过覆盖或者添加方法的手段来获得所需的额外功能。特别是,为了能在面板中进行绘制,则需要:

       1)定义一个扩展了JPanel的新类;

       2)覆盖paintComponent方法;该方法定义在所有Swing组件的父类JComponent类中,它含有一个Graphics类型的参数。为了确保超类完成自己的那份工作,必须在进行自己的绘制工作之前先调用super.paintComponent方法。

只要窗口需要重绘,不管是什么原因,事件处理器都会通知组件,它会引起所有组件中的paintComponent方法被执行。绝不要自己调用这个方法,不应干涉这个自动的过程。

8.如果需要强制性重绘屏幕,可以调用repaint方法,这个方法会使用正确配置了的Graphics参数引起对所有组件的paintComponent调用。

9.Graphics2D类从Graphics扩展而来,用来代替后者。Java 2D库使用面向对象的方式来组织几何形状,为了绘制形状,首先需要创建一个实现了Shape接口的类的对象,然后调用Graphics2D类的draw方法:

       public void paintComponent(Graphics g){

              Graphics2D g2=(Graphics2D)g;

              Rectangle2D rect=…;

              g.draw(rect);

       }

10.设定颜色:

       g2.setPaint(Color.RED);或者g2.setPaint(new Color(0,128,128));

       如果使用的是Graphics对象而非Graphics2D,那么需要使用setColor方法设置颜色。

11.设置框架的背景颜色为用户桌面上所有窗口使用的默认值:

       frame.setBackground(SystemColor.window)

12.填充闭合形状的内部区域只需用fill代替draw:

       Graphics2D g2=(Graphics2D)g;

       Rectangle2D rect=…;

       g2.setPaint(Color.RED);

       g.fill(rect);

13.设置字体:

       Font f=new Font(“Serif”,Font.BOLD,36);

       g2.setFont(f);

14.从本地读取图像:

       String fileName=…;

       Image image = ImageIO.read(new File(filename));

       从网络获取图像:

       String urlName=…;

       Image image = ImageIO.read(new URL(filename));

       显示图像:g.drawImage(image,x,y,null);

15.拷贝屏幕的一块区域:void copyArea(int x,int y,int width,int heigh,int dx,int dy)