Java学习笔记——图形界面

学习目标:

会使用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天


学习产出:

查找文件内容

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值