java笔记之图形类详解
软件的交互方式:
1. 控制台的交互方式、
2. 图形化界面的交互方式 。
java使用到的图形类主要在java.awt 与javax.swing包中。
java.awt 与 javax.swing包的区别:
java.awt中使用的图形类都是依赖于系统 的图形库的。
javax.swing包使用到的图形类都是sun自己实现,不需要依赖系统的图形库。
疑问: 既然swing包中的图形类已经取代awt包的图形类,为什么不删除awt呢?
1、swing比awt包出现的晚,所以会存在一些界面是用了awt包的相关类和方法,删除会带来影响。
2、awt包中不仅含有图像类,还有其它的类和方法。二者仅仅是在图形类上有很高的相似度,而其它则并不是这样。
在java中所有的图形类都被称作组件类。
组件的类别:
----------| 容器组件
----------| 非容器组件
public class Demo1 { public static void main(String[] args) { JFrame frame = new JFrame("这个是我第一个图形化界面的例子"); //设置窗体的大小 // frame.setSize(300,400); //设置窗体(左上角)出现的位置 //frame.setBounds((1366-300)/2, (768-400)/2, 300,400); // 第一个参数是左上角的x轴坐标, 第二参数是左上角y的坐标。 第三个窗体宽, 第四窗体的高。 initFrame(frame, 300,400); frame.setVisible(true); //setVisible 设置窗体的可见性。 //设置窗体关闭事件 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //获取屏幕的分辨率 设置窗体在屏幕的居中位置。 public static void initFrame(JFrame frame,int width , int height){ Toolkit toolkit = Toolkit.getDefaultToolkit(); //获取一个与系统相关工具类对象 //获取屏幕的分辨率 Dimension d = toolkit.getScreenSize(); int x = (int) d.getWidth(); int y = (int) d.getHeight(); frame.setBounds((x-width)/2, (y-height)/2, width, height); } }
JOptionPane(对话框)
消息对话框
警告对话框
错误对话框
输入对话框
确认对话框
此处用上班迟到扣钱为例
import javax.swing.JFrame; import javax.swing.JOptionPane; public class Demo02 { public static void main(String[] args) { JFrame frame=new JFrame("窗体"); Demo01.initJframe(frame, 400, 500); JOptionPane.showMessageDialog(frame, "明天停电,不用上班", "通知", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(frame,"上班迟到2次,迟到次数用完了。","警告",JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(frame, "迟到3次了,罚50元","处分", JOptionPane.ERROR_MESSAGE); JOptionPane.showInputDialog("请输入你要给我的金额($)"); JOptionPane.showConfirmDialog(frame, "你确认要交吗?"); } }
效果展示:
文件对话框(FileDialog):
FileDialog(Dialog parent, String title, int mode)
parent: 对话框的所有者
tiltle : 对话框的标题
mode: load(打开) 、 save(保存)
public class Demo3 { public static void main(String[] args) { JFrame frame = new JFrame("窗体"); //创建一个文件对话框(初始也是不可见) //FileDialog fileDialog = new FileDialog(frame, "请选择打开的文件", FileDialog.LOAD); FileDialog fileDialog = new FileDialog(frame,"请选择保存的路径",FileDialog.SAVE); FrameUtil.initFrame(frame, 300,400); fileDialog.setVisible(true); System.out.println("文件所在的目录:"+ fileDialog.getDirectory()); System.out.println("文件名:"+ fileDialog.getFile()); } }
布局管理器:布局管理就是用于指定组件的 摆放位置的。
每种布局管理器都有自己的摆放风格
BorderLayout(边框布局管理器)
摆放的风格: 上北 、 下南 、 左西、 右东 , 中
Borderlayout 要注意的事项:
1. 使用Borderlayout添加组件的时候,如果没有指定组件的方位,那么默认添加到中间的位置上。
2. 使用BorderLayout的时候,如果东南西北那个方向没有对应 的组件,那么中间位置的组件就会占据其空缺的位置。
3. 窗体默认的布局管理器就是Borderlayout.
public class Demo1 { public static void main(String[] args) { JFrame frame = new JFrame("边框局部管理器"); //创建一个边框布局管理器 BorderLayout borderLayout = new BorderLayout(); //让borderlayout管理frame窗体。 frame.setLayout(borderLayout); frame.add(new JButton("北"),BorderLayout.NORTH); frame.add(new JButton("南"),BorderLayout.SOUTH); frame.add(new JButton("西"),BorderLayout.WEST); frame.add(new JButton("东"),BorderLayout.EAST); frame.add(new JButton("中"),BorderLayout.CENTER); //初始化窗体 FrameUtil.initFrame(frame, 300, 300); } }
流式布局管理器(FlowLayout)
流式布局管理器要注意的事项:
1. 流式布局管理器默认情况是居中对齐的。
2. panel默认的局部管理器就是FlowLayout.
import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Demo04 { public static void main(String[] args) { JFrame frame = new JFrame("窗体"); //创建面板 JPanel panel = new JPanel(); frame.add(panel); //创建一个流式布局管理器 FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 0, 30);// FlowLayout.LEFT 指定对齐的方式。 //让流式布局管理器管理frame窗体 panel.setLayout(flowLayout); panel.add(new JButton("按钮1")); panel.add(new JButton("按钮2")); panel.add(new JButton("按钮3")); panel.add(new JButton("按钮4")); //初始化窗体 Demo01.initJframe(frame,300, 400); } }
表格布局管理器(GridLayout)
注意的事项: 如果表格数量不够使用时,默认会多加一列。
import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Demo04 { public static void main(String[] args) { JFrame frame = new JFrame("计算器"); //创建表格布局管理器 GridLayout gridLayout = new GridLayout(4, 4, 1, 2); //让窗体交给表格布局管理器管理 frame.setLayout(gridLayout); for(int i = 0 ; i<10; i++){ frame.add(new JButton(i+"")); } frame.add(new JButton("+")); frame.add(new JButton("-")); frame.add(new JButton("*")); frame.add(new JButton("/")); frame.add(new JButton("=")); frame.add(new JButton(".")); Demo01.initJframe(frame,300, 400); } }