目录

1、Swing(用户界面类)

2、Swing中的JFrame(顶层窗口类)

3、 在框架中显示信息

4、绘制2D图形

5、设置颜色

6、文本使用特殊字体

7、显示图像


1、Swing(用户界面类)

(1)Swing是基于AWT架构之上的,提供功能更强大的用户界面组件;AWT是基本GUI程序设计的类库

(2)Java中的GUI编程技术的发展:AWT,Swing,SWT,JavaFX

2、Swing中的JFrame(顶层窗口类)

(1)JFrame类是用于描述顶层窗口,JFrame就代表Swing中的窗口组件

(2)JFrame的修饰部件(按钮,标题栏,图标等)是由用户的窗口系统绘制,不由Swing绘制

举例:显示一个窗口,并介绍几个常用属性

package GUI;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class JFrameDemo {
	public static void main(String[] args) {
		/*所有的Swing组件必须由事件分派线程进行配置*/
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				SimpleFrame frame = new SimpleFrame();//初始化窗口
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
				frame.setVisible(true);//显示窗口
			}
		});
	}
}

class SimpleFrame extends JFrame{
	private static final long serialVersionUID = 1L;
	
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 200;
	public SimpleFrame() {
		this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		
		/*setLocation(x,y)仅设置窗口显示位置,相对屏幕左上角*/
//		this.setLocation(500, 500);
		
		/*setBounds(x,y,width,height)重置窗口显示位置和大小*/
//		this.setBounds(200, 200, 500, 400);
		
		/*让窗口系统控制窗口的位置*/
		this.setLocationByPlatform(true);
		
		/*设置窗口标题*/
		setTitle("贪吃蛇");
		
		/*先获得屏幕大小,再设置窗口大小是屏幕大小的一半*/
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		int screenWidth = screenSize.width;
		int screenHeight = screenSize.height;
		setSize(screenWidth/2, screenHeight/2);
		
		/*设置窗口图标*/
//		Image img = new ImageIcon("src/icon.jpg").getImage();
//		setIconImage(img);
		
		
	}
}

Java图形程序设计(1)

3、 在框架中显示信息

package GUI;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class NotHelloWorld {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				NotHelloWorldFrame frame = new NotHelloWorldFrame();//初始化窗口
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
				frame.setVisible(true);//显示窗口
			}
		});
	}
}

class NotHelloWorldFrame extends JFrame{
	private static final long serialVersionUID = 1L;

	/**
	 * 添加消息面板到框架的内容窗格中去
	 */
	public NotHelloWorldFrame() {
		this.add(new NotHelloWorldComponent());
		pack();//根据面板的首选大小,调整窗口大小
	}
}

class NotHelloWorldComponent extends JComponent{
	private static final long serialVersionUID = 1L;
	public static final int MESSAGE_X = 75;
	public static final int MESSAGE_Y = 100;
	
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 200;
	
	/**
	 * 给面板绘制信息
	 */
	@Override
	public void paintComponent(Graphics g) {
		g.drawString("Not a Hello World Program", MESSAGE_X, MESSAGE_Y);
	}
	
	/**
	 * 返回面板的首选大小
	 */
	@Override
	public Dimension getPreferredSize() {
		return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
	}
}

Java图形程序设计(1)

4、绘制2D图形

package GUI;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class DrawTest {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				DrawFrame frame = new DrawFrame();//初始化窗口
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
				frame.setVisible(true);//显示窗口
			}
		});
	}
}

@SuppressWarnings("serial")
class DrawFrame extends JFrame{
	public DrawFrame() {
		add(new DrawComponent());
		pack();
	}
}

@SuppressWarnings("serial")
class DrawComponent extends JComponent{
	private static final int DEFAULT_WIDTH = 500;
	private static final int DEFAULT_HEIGHT = 400;
	
	@Override
	public void paintComponent(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		
		//绘制一个矩形
		double leftX = 100;
		double topY = 100;
		double width = 200;
		double height = 150;
		Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);
		g2.draw(rect);//描绘边框
		
		g2.setPaint(Color.RED);//设置颜色
		g2.fill(rect);//填充颜色,右侧和下方少绘制一个像素的颜色
		
	}
	
	@Override
	public Dimension getPreferredSize() {
		return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
	}
}

Java图形程序设计(1)

5、设置颜色

(1)获取和改变当前颜色,所有后续的绘图操作都使用这个新颜色

Color getColor( )

void setColor( Color c )

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

(2)获取和设置这个图形环境的绘制属性,即设置画笔的颜色

Paint getPaint( )

void setPaint( Paint p )

void fill( Shape s )

(3)背景色和前景色

setBackground( Color c )

setForeground( Color c )

6、文本使用特殊字体

package GUI;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class FontTest {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				JFrame frame = new FontFrame();//初始化窗口
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
				frame.setVisible(true);//显示窗口
			}
		});
	}
}

@SuppressWarnings("serial")
class FontFrame extends JFrame{
	public FontFrame() {
		add(new FontComponent());
		pack();
	}
}

@SuppressWarnings("serial")
class FontComponent extends JComponent{
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 200;
	
	@Override
	public Dimension getPreferredSize() {
		return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
	}
	
	@Override
	public void paintComponent(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		
		String msg = "Hello World";
		
		//创建一个新字体对象,字体名,字体风格,字体大小
		Font f = new Font("Serif", Font.BOLD, 36);
		g2.setFont(f);
		
		//----要想字符串在面板的中央位置
		//返回指定字体特征的字体绘制环境
		FontRenderContext context = g2.getFontRenderContext();
		//返回包围字符串的矩形
		Rectangle2D bounds = f.getStringBounds(msg, context);
		double x = (getWidth() - bounds.getWidth()) / 2;
		double y = (getHeight() - bounds.getHeight()) / 2; 
		double ascent = -bounds.getY();
		double baseY = y + ascent;
		g2.drawString(msg, (int)x, (int)baseY);
		
		//---显示基线
		g2.draw(new Line2D.Double(x, baseY, x+bounds.getWidth(), baseY));
		
	}
}

Java图形程序设计(1)

7、显示图像

package GUI;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class ImageTest {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				JFrame frame = new ImageFrame();//初始化窗口
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置:关闭窗口,则程序退出
				frame.setVisible(true);//显示窗口
			}
		});
	}
}

@SuppressWarnings("serial")
class ImageFrame extends JFrame{
	public ImageFrame() {
		add( new ImageComponent() );
		pack();
	}
}

@SuppressWarnings("serial")
class ImageComponent extends JComponent{
	private static final int DEFAULT_WIDTH = 800;
	private static final int DEFAULT_HEIGHT = 600;
	private Image img;
	
	public ImageComponent() {
		img = new ImageIcon("src/icon.jpg").getImage();
	}
	
	@Override
	public Dimension getPreferredSize() {
		return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
	}
	
	@Override
	public void paintComponent(Graphics g) {
		if(img == null) return;
		
		int imgWidth = img.getWidth(this);
		int imgHeight = img.getHeight(this);
		g.drawImage(img, 0, 0 ,130, 190, null);
		
		for(int i=0; i*imgWidth <= getWidth(); i++) {
			for(int j=0; j*imgHeight <= getHeight(); j++) {
				if(i+j > 0) {
					g.copyArea(0, 0, imgWidth, imgHeight, i*130, j*190);
				}
			}
		}
		
	}
}

 

 

 

 

 

 

 

 

 

相关文章: