Java入门学习笔记(十二)——图形界面设计基础、AWT、组件、容器、|| 布局管理器、流式布局管理器、边界布局管理器、卡式布局管理器、|| Java事件处理、事件适配器

一、AWT简单介绍

AWT组件包含本地代码,与硬件平台密切相关。
Swing组件不含本地代码,可以不受硬件平台的限制。
Swing组件属于JFC,主要帮助我们建立图形用户界面。

1. 列出本地所有字体的名称等信息

GraphicsEnvironment类是抽象类,描述了Java应用程序在特定平台上可用的GraphicsDevice和Font对象的集合。

package PackageB;

import java.awt.Font;
import java.awt.GraphicsEnvironment;

public class Fonts {
    
    
	public static void printFont(Font f)
	{
    
    
		System.out.println("系列名称: "+f.getFamily());
		System.out.println("字体外观名称: "+f.getFontName());
		System.out.println("逻辑名称:"+f.getName()+"\n");
	}
	
	public static void main(String[] args)
	{
    
    
		GraphicsEnvironment ge;
		ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
		Font[] fonts=ge.getAllFonts();
		for(Font font:fonts)
		{
    
    
			printFont(font);
		}
	}
}


部分运行结果

在这里插入图片描述

2.使用JFrame创建一个简单的Hello应用程序

package PackageB;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class HelloJFrame {
    
    
	public static void main(String[] args)
	{
    
    
		// 创建窗口实例,并设置标题
		JFrame f=new JFrame("hello 系统");
		// 
		JButton b=new JButton("进入系统");
		Container c=null;
		JLabel lb=new JLabel("欢迎使用本系统");
		lb.setForeground(Color.BLUE);
		c=f.getContentPane();
		c.add(lb,BorderLayout.CENTER);
		c.add(b,BorderLayout.EAST);
		f.setSize(300,150);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 显示窗口
		f.setVisible(true);
	}
}

结果展示

在这里插入图片描述

3.关于窗格的简单程序

(1)MessagePanel类

package PackageB;

import java.awt.Graphics;

import javax.swing.JPanel;

public class MessagePanel extends JPanel{
    
    
	//重载方法
	protected  void paintComponent(Graphics g)
	{
    
    
		super.paintComponent(g);
		g.drawString("信息窗格:",10,20);
		g.drawString("重要的事说三遍:", 100, 40);
		for(int i=1;i<=3;++i)
			g.drawString("你是最帅的少年!", 100, 40+i*20);
	}
}

(2)PanulFrame类

package PackageB;

import javax.swing.JFrame;

public class PanelFrame extends JFrame{
    
    
	private static final int DEFAULT_WIDTH=500;
	private static final int DEFAULT_HEIGHT=300;
	public PanelFrame()
	{
    
    
		setTitle("消息框架(谁是最帅的少年?)");
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		MessagePanel panel=new MessagePanel();
		add(panel);
		//add(panel);
		setVisible(true);
	}
	
	public static void main(String[] args)
	{
    
    
		PanelFrame frame=new PanelFrame();
		frame.setVisible(true);
	}
}

(3)运行结果

在这里插入图片描述

二、布局管理器

1.流式布局管理器

package PackageB;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowJFrame {
    
    
	public static void main(String[] args)
	{
    
    
		// 建新一个JFrame实例,标题为流式布局管理器
		JFrame f=new JFrame("流式布局管理器例子");
		// 得到JFrame中的contentPane对象,返回Container对象
		Container c=null;
		c=f.getContentPane();
		// 建新流式布局管理器
		// 容器的默认对齐方式是FlowLayout.CENTER
		FlowLayout flowLayout=new FlowLayout();
		// 修改默认对齐方式
		flowLayout.setAlignment(FlowLayout.RIGHT);
		// 将建立的流式布局管理器使用到C容器中
		c.setLayout(flowLayout);
		// 创建按钮数组,数组大小为9
		JButton b[]=new JButton[9];
		for(int i=0;i<9;++i)
		{
    
    
			b[i]=new JButton("按钮"+i);
			b[i].setBackground(Color.LIGHT_GRAY);
			c.add(b[i]);
		}
		f.setSize(500,200);
		f.setVisible(true);
	}
}

在这里插入图片描述

修改对齐方式

在这里插入图片描述
在这里插入图片描述

package PackageB;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowJFrame {
    
    
	public static void main(String[] args)
	{
    
    
		// 建新一个JFrame实例,标题为流式布局管理器
		JFrame f=new JFrame("流式布局管理器例子");
		// 得到JFrame中的contentPane对象,返回Container对象
		Container c=null;
		c=f.getContentPane();
		// 建新流式布局管理器
		// 容器的默认对齐方式是FlowLayout.CENTER
		FlowLayout flowLayout=new FlowLayout();
		// 修改默认对齐方式
		flowLayout.setAlignment(FlowLayout.TRAILING);
		// 将建立的流式布局管理器使用到C容器中
		c.setLayout(flowLayout);
		// 创建按钮数组,数组大小为9
		JButton b[]=new JButton[9];
		for(int i=0;i<9;++i)
		{
    
    
			b[i]=new JButton("按钮"+i);
			b[i].setBackground(Color.LIGHT_GRAY);
			c.add(b[i]);
		}
		f.setSize(500,200);
		f.setVisible(true);
	}
}

在这里插入图片描述

2.边界布局管理器

package PackageB;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;

public class BorderJFrame {
    
    
	public static void main(String[] args)
	{
    
    
		// 创建窗口实例,并设置标题
		JFrame f=new JFrame("边界布局管理器");
		Container c=null;
		c=f.getContentPane();
		c.setLayout(new BorderLayout());
		String direction[]= {
    
    BorderLayout.EAST,BorderLayout.WEST,
				BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.CENTER};
		// 创建按钮数组
		JButton b[]=new JButton[5];
		for(int i=0;i<5;++i)
		{
    
    
			b[i]=new JButton("按钮"+i);
			b[i].setBackground(Color.cyan);
			c.add(b[i],direction[i]);
		}
		f.setSize(300,200);
		f.setVisible(true);
	}
}

在这里插入图片描述

3.网格布局管理器

package PackageB;

import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GridJFrame {
    
    
	public static void main(String[] args)
	{
    
    
		JFrame f=new JFrame("卡式布局管理器");
		Container c=null;
		c=f.getContentPane();
		c.setLayout(new GridLayout(5,4));
		JButton b[]=new JButton[9];
		for(int i=0;i<9;++i)
		{
    
    
			b[i]=new JButton("按钮"+Integer.toString(i));
			b[i].setBackground(Color.lightGray);
			c.add(b[i]);
		}
		f.setSize(300, 200);
		f.setVisible(true);
	}
}

在这里插入图片描述

四、卡式布局管理器

package PackageB;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardFrame extends MouseAdapter{
    
    
		private JFrame f;
		private Container c=null;
		private CardLayout card;
		CardFrame()
		{
    
    
			f=new JFrame("卡式布局管理器");
			c=f.getContentPane();
			card=new CardLayout();
		}
		
		public static void main(String[] args)
		{
    
    
			CardFrame cf=new CardFrame();
			cf.init();
		}
		
		public void init()
		{
    
    
			c.setLayout(card);
			// 创建窗格数组
			JPanel p[]=new JPanel[5];
			// 创建标签数组
			JLabel lb[]=new JLabel[5];
			JButton b[]=new JButton[5];
			for(int i=0;i<5;i++)
			{
    
    
				p[i]=new JPanel();
				p[i].setBackground(Color.LIGHT_GRAY);
				lb[i]=new JLabel("这是第"+i+"卡片");
				b[i]=new JButton("按钮"+i);
				p[i].add(lb[i]);
				p[i].add(b[i]);
				//p[i].addMouseListener(this);
				b[i].addMouseListener(this);
				c.add(p[i],"卡片"+i);
			}
			f.setSize(270, 200);
			f.setVisible(true);
		}
		
		public void mouseClicked(MouseEvent e)
		{
    
    
			card.next(c);
		}
}

在这里插入图片描述

三、Java事件处理

1.Triangle1类

package try_a_package;

public class Triangle1 {
    
    
	private double a,b,c;
	String name="三角形";
	
	public Triangle1()
	{
    
    
		this(10);
	}
	
	public Triangle1(double x)
	{
    
    
		this(x,x,x);
	}
	
	public Triangle1(double x,double y)
	{
    
    
		this(x,x,y);
	}
	
	public Triangle1(double a,double b,double c)
	{
    
    
		this.a=a;
		this.b=b;
		this.c=c;
		adjustName();
	}
	
	public void adjustName()
	{
    
    
		if(this.isTriangle())
		{
    
    
			double  t;
			if(a>b)
			{
    
    
				t=a;
				a=b;
				b=t;
			}
			if(a>c)
			{
    
    
				t=a;
				a=c;
				c=t;
			}
			if(b>c)
			{
    
    
				t=b;
				b=c;
				c=t;
			}
			name="三角形";
			if(c*c==a*a+b*b)
			{
    
    
				name="直角"+name;
			}
			else if(a==b&&b==c)
			{
    
    
				name="等边"+name;
			}
			else if(a==b||b==c)
			{
    
    
				name="等腰"+name;
			}
		}
		else
		{
    
    
			name="非三角形";
		}
	}
	
	public boolean isTriangle()
	{
    
    
		if(a+b>c && a+c>b && b+c>a)
		{
    
    
			return true;
		}
		return false;
	}
	
	public double    getPerimeter()
	{
    
    
		return a+b+c;
	}
	
	public double getArea()
	{
    
    
		double p,s;
		p=(a+b+c)/2;
		s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
		return s;
	}
	
	@Override
	public String toString()
	{
    
    
		String msg=name+"a="+a+",b="+b+",c="+c;
		if(isTriangle())
		{
    
    
			msg=msg+",周长"+this.getPerimeter()+",面积"+this.getArea();
		}
		return msg;
	}
	
	public static void printHeader()
	{
    
    
		System.out.println("图形名称\t\t边长a\t边长b\t边长c\t周长\t面积");
	}
}

2.ButtonOfTriangle类

package PackageB;

import javax.swing.JButton;

public class ButtonOfTriangle extends JButton{
    
    
	private AreaOfTriangle f;
	public ButtonOfTriangle(String s,AreaOfTriangle f)
	{
    
    
		// 显示s字符串?
		super(s);
		this.f=f;
		this.addMouseListener(new ButtonAdapterOfTriangle(f));
	}
}

3.ButtonAdapterOfTriangle类

package PackageB;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JTextField;

import try_a_package.Triangle1;

public class ButtonAdapterOfTriangle extends MouseAdapter{
    
    
	private AreaOfTriangle f;
	public ButtonAdapterOfTriangle(AreaOfTriangle f)
	{
    
    
		this.f=f;
	}
	
	@Override
	public void mouseClicked(MouseEvent e)
	{
    
    
		double a[]=new double[3];
		JTextField []jt=f.jt;
		try {
    
    
			for(int i=0;i<3;++i)
			{
    
    
				a[i]=Double.valueOf(jt[i].getText().trim());
			}
		}catch(Exception ee)
		{
    
    
			f.result.setText("没有输入数据或者输入数据不合法!");
			return;
		}
		
		Triangle1 t=new Triangle1(a[0],a[1],a[2]);
		if(t.isTriangle())
		{
    
    
			f.result.setText(t.toString());
		}
		else
		{
    
    
			f.result.setText(t.toString());
		}
	}
}

4. AreaOfTriangle类

package PackageB;

import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class AreaOfTriangle {
    
    
	JLabel lb=new JLabel("输入三角形的三条边长:");
	JLabel result=new JLabel("面积是:");
	JTextField jt[]=new JTextField[3];
	private JFrame f;
	private ButtonOfTriangle b=new ButtonOfTriangle("求周长与面积",this);
	
	public AreaOfTriangle()
	{
    
    
		f=new JFrame();
		f.setTitle("求三角形面积");
		Container c=f.getContentPane();
		c.setLayout(new GridLayout(3,1));
		JPanel p1=new JPanel();
		p1.setLayout(new GridLayout(1,12));
		p1.add(lb);
		for(int i=0;i<jt.length;++i)
		{
    
    
			jt[i]=new JTextField();
			p1.add(jt[i]);
		}
		c.add(p1);
		c.add(result);
		JPanel p2=new JPanel();
		p2.setLayout(new GridLayout(1,3));
		p2.add(new JLabel(""));
		p2.add(b);
		p2.add(new JLabel(""));
		c.add(p2);
		f.setSize(1000,200);
		setFont("楷体",18);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	
	public void setFont(String fontName,int size)
	{
    
    
		Font font=new Font(fontName,Font.PLAIN,size);
		lb.setFont(font);
		for(int i=0;i<jt.length;++i)
		{
    
    
			jt[i].setFont(font);
		}
		result.setFont(font);
		b.setFont(font);
	}
	
	public static void main(String[] args)
	{
    
    
		AreaOfTriangle a=new AreaOfTriangle();
		System.out.println("Success!");
	}
}

5.运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41563270/article/details/108943251