我的第一个java_GUI程序

package com.supermap;

import javax.swing.JFrame;

public class SimpleFrameTest {
	public static void main(String [] args){
		SimpleFrame frame=new SimpleFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

class SimpleFrame extends JFrame{
	public SimpleFrame(){
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
	}
	public static final int DEFAULT_WIDTH=300;
	public static final int DEFAULT_HEIGHT=200;
}

Swing类位于javax.swing包中,包名javax表示这是一个java扩展包,而不是核心包,在默认情况下,框架的大小为0*0,这种框架没有什么实际意义,这里定义了一个子类SimpleFrame,它的构造器将框架大小设置为300*200像素,这是SimpleFrame和JFrame之间唯一的差别。

在每个Swing程序中,有两点技术需要强调。

首先,所有的Swing组件必须由事件调度线程(event dispatch thread)进行配置,线程将鼠标点击和键盘敲击控制转移到用户接口组件,下面代码片段是事件调度线程中的执行代码:

EventQueue.invokeLater(new Runnable{

        public void run(){

                statements

        }

});

接下来,定义一个用关闭这个框架时的响应动作,对于这个程序而言,只让程序简单地退出即可,选择这个响应动作的语句是

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

JFrame中的几个常用方法:

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

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

setTitl用于改变标题栏的文字

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

决定窗口大小

为了得到屏幕的大小,需要按照下列步骤操作,调用Toolkit类的静态方法getDefaulToolkit得到一个Toolkit对象,然后,调用getScreenSize方法,这个方法以Dimension对象形式返回屏幕的大小,Dimension对象同时用用有实例变量width和height保存着屏幕的宽度和高度。

ToolKit kit=ToolKit.getDefaultToolKit();

Dimension screenSize=kit.getScreanSize();

int screanWidth=screanSize.width;

int screanHeight=screanSize.height;

下面,将框架大小设定为上面取值的50%,然后,告知窗口系统定位框架

setSize(screanWidth/2,screanHeight/2);

setLocationByPlatform(true);

另外,还提供一个图标,由于图像的描述与系统有关,所以需要再次使用工具箱加载图像,然后,将这个图像设置为框架的图标。

Image img=kit.getImage("icon.gif");

setIconImage(img);

可以通过调用下列方法将框架设置为最大

frame.setExtendedState(Frame.MAIMIZED_BOTH);

 

在设计框架的时候,要使用下列代码将所有的组件添加到内容窗格中:

Container contentPane=frame.getContentPane();

Component c=. . . ;

contentPane.add(c);

在这里,打算将一个绘制消息的组件添加到框架中,绘制一个组件,需要定义一个扩展JComponent的类,并覆盖其中的paintComponent方法。paintComponent方法有一个Graphics类型的参数,这个参数保存着用于绘制图像和文本的设置,例如,设置的字体或当前的颜色,所有的绘制都必须使用Graphics对象,其中包含了绘制图案,图像和文本的方法。

下列代码给出了如何创建一个能够进行绘制的组件:

class MyComponent extends JComponent{

         public void paintComponent(Graphics g){

                code for drawing

         }

}

无论何种原因,只要窗口需要重新绘图,事件处理器就会通告组件,从而引发执行所有组件的pinComponent方法。

一定不用自己调用painComponent方法,在应用陈翔需要从新绘图的时候,这个方法将被自动调用,不要人为的干预这个自动的处理过程。

 

如果需要强制刷新屏幕,就需要调用repaint方法,而不是paintComponent方法,它将引发采用相应配置的Graphics对象调用所有组件的paintComponentf方法。

 

显示文本是一种特殊的绘图,在Graphics类中有一个drawString方法,调用语句格式为:

g.drawString(text,x,y);

三角号代表是复写了父类的方法,这个paintComponent是自动调用的,不用自己调用来干预。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值