博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习笔记——图形界面
阅读量:3959 次
发布时间:2019-05-24

本文共 3754 字,大约阅读时间需要 12 分钟。

学习目标:

会使用Java做一些简单的页面设计


学习内容:

一.窗体形容器

java的图形界面中,容器是用来存放 按钮,输入框等组件的。

窗体型容器有两个,一个是JFrame,一个是JDialog。

  • JFrame:最常用的窗体型容器,默认情况下,在右上角有最大化最小化按钮

用法:JFrame f = new JFrame("新建窗口");

基本设置:

方法 解读
f.setTitle(“新建窗口”); 主窗体设置标题
f.setSize(400, 300); 主窗体设置大小(宽,高)
f.setLocation(200, 200); 主窗体设置位置(以屏幕右上角为原点的X,Y)
f.setLayout(null); 主窗体中的组件设置为绝对定位
f.add(b); 把组件(b)加入到主窗体中
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 关闭窗体的时候,退出程序
f.setVisible(true); 让窗体变得可见
  • JDialog:也是窗体型容器,右上角没有最大和最小化按钮

用法与JFrame一样,也可以根据外部窗体实例化JDialogJDialog d = new JDialog(f);

将JDialog设置为模态:d.setModal(true);
当一个对话框被设置为模态的时候,其背后的父窗体,是不能被激活的,除非该对话框被关闭

基本设置与JFrame一样

二.面板

面板和JFrame一样都是容器,不过面板一般用来充当中间容器,把组件放在面板上,然后再把面板放在窗体上。

一旦移动一个面板,其上面的组件,就会全部统一跟着移动,采用这种方式,便于进行整体界面的设计。
创建面板(例):JPanel p = new JPanel();

  • JPanel:基本面板

    在这里插入图片描述

  • ContentPane :JFrame上的一层面板

    平时通过f.add()向JFrame增加组件,其实是向JFrame上的 ContentPane加东西

  • SplitPanel :水平面板

    创建一个水平JSplitPane,左边是pLeft,右边是pRight:
    JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, spLeft, spRight);
    在这里插入图片描述

  • JScrollPanel :带滚动条的面板

    两种方式:
    1)在创建时,把组件作为参数传进去:JScrollPane sp = new JScrollPane(ta);
    2)希望显示其他组件的时候,调用setViewportView:sp.setViewportView(ta);
    在这里插入图片描述

  • TabbedPanel :JTabbedPane tp = new JTabbedPane();

    在这里插入图片描述

  • CardLayerout:与TabbedPanel相似JComboBox<String> cb = new JComboBox<>(字符串);

    在这里插入图片描述

三.布局器

  • 绝对定位:指不使用布局器,组件的位置和大小需要单独指定

  • FlowLayout:顺序布局器,容器上的组件水平摆放,无需单独指定大小和位置

    f.setLayout(new FlowLayout());
    在这里插入图片描述

  • BorderLayout:容器上的组件按照上北 下南 左西 右东 中的顺序摆放

    f.setLayout(new BorderLayout());
    在这里插入图片描述

  • GridLayout:网格布局器

    f.setLayout(new GridLayout());
    在这里插入图片描述

  • setPreferredSize:向布局器建议该组件显示的大小

    组件名.setPreferredSize(new Dimension(宽,高));
    在这里插入图片描述

四.组件

关键字 简介
JLabel 标签
setIcon 使用JLabel显示图片
JButton 按钮
JCheckBox 复选框
JRadioButton 单选框
ButtonGroup 按钮组
JComboBox 下拉框
JOptionPane 对话框
JTextField 文本框
JPasswordField 密码框
JTextArea 文本域
JProgressBar 进度条
JFileChooser 文件选择器

五.事件监听

关键字 简介
ActionListener 按钮监听
KeyListener 键盘监听
MouseListener 鼠标监听
Adapter 适配器

监听一般通过匿名类实现:

例:

// 给按钮 增加 监听        按钮名.addActionListener(new ActionListener() {
// 当按钮被点击时,就会触发 ActionEvent事件 // actionPerformed 方法就会被执行 public void actionPerformed(ActionEvent e) {
方法体 } });

另:

  • 键盘监听器: KeyListener

    keyPressed 代表 键被按下
    keyReleased 代表 键被弹起
    keyTyped 代表 一个按下弹起的组合动作
    KeyEvent.getKeyCode() 可以获取当前点下了哪个键

  • 鼠标监听器:MouseListener

    mouseReleased 鼠标释放
    mousePressed 鼠标按下
    mouseExited 鼠标退出
    mouseEntered 鼠标进入
    mouseClicked 鼠标点击

  • 鼠标监听适配器:MouseAdapter

    一般说来在写监听器的时候,会实现MouseListener。
    但是MouseListener里面有很多方法实际上都没有用到,比如mouseReleased ,mousePressed,mouseExited等等。
    这个时候就可以使用 鼠标监听适配器,MouseAdapter 只需要重写必要的方法即可。

六.菜单

在这里插入图片描述

菜单栏: JMenuBar mb = new JMenuBar();
菜单项:JMenu m1 = new JMenu("菜单项1");
把菜单加入到菜单栏:mb.add(m1);

七.工具栏

在这里插入图片描述

工具栏:JToolBar tb = new JToolBar();

然后往工具栏里面add工具就行了

八.表格

  • 基本表格:JTable t = new JTable(内容, 标题);

    显示一个Table需要两组数据
    (1)一维数组:String[] 标题表示表格的标题
    (2)二维数组: String[][] 内容 表格中的内容
    默认情况下,表格的标题是不会显示出来了

  • 带滚动条的Panel:JScrollPane

    把table放进去就可以看到table的title,如果数据够多就会看到滚动条

表格使用TableModel可以和数据库连接起来!

使用selection监听器来监听table的哪个条目被选中:t.getSelectionModel().addListSelectionListener(...)

九.Swing中的线程

1.初始化线程

为了避免主线程和时间调度线程同时访问组件,需要在主线程中加入如下代码保证同时只有事件调度线程访问组件等内容:

EventQueue.invokeLater(new Runnable() {	public void run() {		new TestFrame().setVisible(true);	}});

2.事件调度线程

以 按钮监听 中的代码为例,ActionListener.actionPerformed 中的代码,就是事件调度线程执行的。
事件调度线程是单线程的。因为 Swing里面的各种组件类都不是线程安全的,这就意味着,如果有多个线程,那么同一个JTextField的setText方法,可能会被多个线程同时调用,这会导致同步问题以及错误数据的发生。
3.长耗时任务线程
有时候需要执行长耗时任务,比如数据库查询,文件复制,访问网络等等。
而这些操作一般都会在事件响应后发起,就会自动进入事件调度线程。 而事件调度线程又是单线程模式,其结果就会是在执行这些长耗时任务的时候,界面就无响应了。
为了解决这个问题,Swing提供了一个SwingWorker类来解决。 SwingWorker是一个抽象类,为了使用,必须实现方法 doInBackground,在doInBackground中,就可以编写我们的任务,然后执行SwingWorker的execute方法,放在专门的工作线程中去运行。

SwingWorker worker = new SwingWorker() {	protected Object doInBackground() throws Exception {		//长耗时任务		return null;	}};worker.execute();

总结:还挺好玩的!


学习时间:

4天


学习产出:

转载地址:http://edozi.baihongyu.com/

你可能感兴趣的文章
人生必修的181条佛理
查看>>
The Most Widely Used Java Libraries
查看>>
简单在单机使用apache-james(开源邮件服务器)
查看>>
lsof 快速起步
查看>>
使用ScribeFire方便地发布blog
查看>>
跨平台Java程序注意事项
查看>>
Python字符与数字的相互转换
查看>>
C 指针解读
查看>>
有关乱码的处理---中国程序员永远无法避免的话题
查看>>
JSP的运行内幕
查看>>
python超简单的web服务器
查看>>
代理模式、静态代理、动态代理、aop
查看>>
Struts1.x Spring2.x Hibernate3.x DWR2.x整合工具文档v1.00
查看>>
大型Web2.0站点构建技术初探
查看>>
机器学习算法汇总:人工神经网络、深度学习及其它
查看>>
解决Spring中AOP不能切入Struts的DispatchAction方法的问题
查看>>
出国以后才知道英语应该怎么学
查看>>
计算机专业权威期刊投稿经验总结
查看>>
如何在三个月内学会一门外语?
查看>>
看看你对Linux到底了解多少?
查看>>