zoukankan      html  css  js  c++  java
  • Java 基础(三)

    Java 基础(三)

    目录


    简述:

    以下将会介绍Java中的图形用户界面程序设计的部分内容

    back


    窗体简述

    窗体

    在Java中,顶层的窗口就称为窗体,在AWT库中有一个叫Frame的类,而在Swing版本中,名叫JFrame,其扩充了Frame类,由系统绘制。

    例如这个例子:

    package Learn;
    
    
    import javax.swing.*;
    import java.awt.*;
    import java.lang.reflect.InvocationTargetException;
    
    public class SimpleTest {
        public static void main(String[] args) {
            try {
            //使用了线程
                EventQueue.invokeAndWait(()->{
                    SimpleFrame frame=new SimpleFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    //窗体关闭按钮动作
                    frame.setVisible(true);
                    //窗体可见
                });
            } catch (InterruptedException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
    //窗体
    class SimpleFrame extends JFrame{
        private static final int DEFAULT_WIDTH=300;
        private static final int DEFAULT_HEIGHT=200;
        public SimpleFrame(){
            setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        }
    }
    
    

    下面我们对这个程序进行分析

    Swing类位于javax.swing包中,因此需要进行引包。javax是java扩展包,不是核心包。

    默认情况下,窗体的大小是 0 × 0 ,我们定一个了一个子类SimpleFrame,构造器将窗口的大小设置为 300×200。

    在main函数中,我们设置了让其可见以及定义用户关闭这个窗口时的响应动作,完全关闭。在默认情况下,仅仅会关闭该窗口,也就是隐藏,并不使其完全关闭。

    如果仅仅是构造窗口,窗体是不会自动显示出来的,而为了显示窗体,main方法需要调用窗口的setVisiable方法。

    窗口有很多的属性,比如设置大小,设置位置,设置颜色,设置标题等等,下面将举例一些常用的方法,都是在JFrame中。

    back

    窗体常用方法

    方法 作用
    boolean isVisiable() 窗体是否可见
    void setVisiable() 设置窗体可见
    void setSize(int width,int height) 将组件的大小调整为给定的宽度和高度
    void setLocation(int x,int y) 将组件移动到一个新的位置。顶层组件使用屏幕坐标
    void setBounds(int x,int y,int width,int height) 移动并且调整组件大小
    Dimension getSize() 获取当前组件的size属性
    void setSize(Dimension d) 设置当前组件的size属性
    boolean isResizable() 是否可调整窗体的大小
    void setResizable(boolean b) 设置窗体是否可调整大小
    String getTitle() 获取窗体标题
    void setTitle(String s) 设置窗体标题
    void setJMenuBar(JMenuBar bar) 设置窗体的菜单栏

    有了窗体,我们仅仅是能够看见东西,但是没有任何的组件,也没有任何的内容,连hello word都没有,当然,我们不适用hello word......

    就因为这样,我们需要添加一些东西去里面

    back

    组件中显示信息

    我们想添加一些东西进入窗体中,那么我们得使用add方法,是在窗体中使用的,就像这样

    
    package Learn;
    
    import javax.swing.*;
    
    public class SimpleTest extends JFrame{
        SimpleTest(){
            add(new JTextField("we not use hello word"));
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300,200);
            setVisible(true);
        }
        public static void main(String[] args) {
            new SimpleTest();
        }
    }
    
    

    这样我们就在窗体中添加了一个文本框,并且把文本框初始化了一句信息

    Component add(Component c)这个语句是将一个给定的组件添加到该窗体的内容窗格中,并且返回这个组件(往往我们都忽略了这个东西)

    了解了窗体的内容,那让我们去看看,窗体能够塞一些什么样的东西进去吧

    back


    组件

    JButton按钮

    这是一个按钮

    其常用的方法有以下:

    方法 作用
    JButton() 构造方法,创建不带有图标或者文字的按钮
    JButton(String str) 构造方法,创建带有文字的按钮
    JButton(Icon icon) 构造方法,创建带有图标的按钮
    --- ---
    void setText(String str) 设置按钮的名称
    void setFont(Font font) 设置按钮名称的字体
    void setForeground(Color color) 设置按钮的颜色,前景
    void setEnable(Boolean boolean) 设置按钮是否能够按动
    void addActionListener(ActionListener listener) 设置按钮的按动事件监听器
    void removeActionListener() 取消按钮的按动事件监听器

    back

    JTextField单行文本框(文本域)

    创建一个单行的文本框,需要限定有多少列,不然默认0列

    常用的方法有:

    方法 作用
    JTextField() 创建一个默认的文本框
    JTextField(String str) 创建一个带有文字的文本框
    JTextField(int columns) 创建一个有columns列的文本框
    JTextField(String text,int columns) 创建一个具有初始化信息的,并且具有columns列的文本框
    --- ---
    String getText() 获取文本框的内容
    void setText() 设置文本框的内容
    boolean isEditable() 获取文本框是否可编辑信息
    void setEditable(Boolean boolean) 设置文本框是否可编辑信息
    int getColumns() 获取文本框使用的列数
    void setColumns(int columns) 设置文本框使用的列数

    back

    JTextArea文本区

    这是创建一个文本区,拥有几行和几列的一个可写文本区

    常用方法有:

    方法 作用
    JTextArea() 创建一个新的默认的文本区
    JTextArea(String text) 构造显示指定文本的文本区
    JTextArea(int rows, int columns) 构造显示指定行数,指定列数的文本区
    JTextArea(String text, int rows, int columns) 构造指定行数,指定列数,并且显示指定文字的文本区
    --- ---
    void append(String str)void append(String str) 将字符串 str 添加到文本域的最后位置
    void setColumns(int columns) 设置文本域的行数
    void setRows(int rows) 设置文本域的列数
    int getColumns() 获取文本域的行数
    int getRows() 获取文本域的列数
    void setLineWrap(boolean wrap) 设置文本域的换行策略(是否到了所在的列数之后会自动换行)

    back

    JLabel

    这是一个标签,用于显示信息

    JLabel类可以显示文本或图像。通过在显示区域中设置垂直和水平对齐来对齐标签的内容。默认情况下,标签在显示区域中垂直居中。

    默认情况下,纯文本标签前沿对齐; 默认情况下,仅图像标签水平居中。

    创建完的Label对象可以通过Container类中的add()方法,加入到容器中

    常用方法:

    方法 作用
    JLabel() 创建一个JLabel对象
    JLabel(String text) 创建一个标签并制定文本内容,默认左对齐
    JLabel(String text,int alignment) 创建一个标签并制定文本内容以及对齐方式
    JLabel(String text,Icon icon,int horizontalAlignment) 创建具有指定文本,图像,水平对齐方式的JLabel对象
    void setText(String text) 设置标签的文本
    String getText() 获取标签文本

    back

    JPanel

    JPanel类是一个通用的轻量级容器。

    容器的目的就是容纳更多的东西

    把我们所需要的组件往其中添加,然后再把容器添加到窗体,是一个很平常的做法

    JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件,如JButton、JTextArea、JTextField 等,功能是对窗体上的这些控件进行组合

    常用方法:

    方法 作用
    JPanel() 使用双缓冲区和流布局创建新的JPanel
    JPanel(boolean isDoubleBuffered) 使用FlowLayout和指定的缓冲策略创建新的JPanel
    JPanel(LayoutManager layout) 使用指定的布局管理器创建新的缓冲JPanel
    JPanel(LayoutManager layout, boolean isDoubleBuffered) 使用指定的布局管理器和缓冲策略创建新的JPanel
    --- ---

    back

    JScrollPane滚动面板

    JScrollPane 内包含一个视口(ViewPort),表示 JScrollPane 的显示区域。视口内包含一个需要滚动显示的组件,称为视图。

    其中,JScrollPane常使用的方法有:

    方法 作用
    JScrollPane() 创建默认的滚动面板
    JScrollPane(Component view) 初始构造具有组件的滚动面板,默认垂直滚动
    JScrollPane(int vsbPolicy, int hsbPolicy) 创建无组件,但具有滚动策略(垂直滚动策略(vsbPolicy),水平滚动策略(hsbPolicy))的滚动面板
    JScrollPane(Component view, int vsbPolicy, int hsbPolicy) 创建具有组件,并且设置滚动策略(垂直滚动策略(vsbPolicy),水平滚动策略(hsbPolicy))
    --- ---
    void setViewportView(Component view) 设置滚动显示视图内容组件
    void setVerticalScrollBarPolicy(int policy) 设置垂直滚动条的显示策略
    void setHorizontalScrollBarPolicy(int policy) 设置水平滚动条的显示策略
    void setWheelScrollingEnabled(boolean handleWheel) 是否响应鼠标滚动事件,默认响应

    滚动策略取值:

    • 垂直滚动条(vsbPolicy)

      • ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED 需要时显示(默认)
      • ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER 从不显示
      • ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS 总是显示
    • 水平滚动条(hsbPolicy)

      • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED 需要时显示(默认)
      • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER 从不显示
      • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS 总是显示
    package Learn;
    
    
    import javax.swing.*;
    
    public class SimpleTest extends JFrame{
        SimpleTest(){
    			//为JTextArea添加滑动条
            JScrollPane scrollPane=new JScrollPane(new JTextArea("we not use hello word"));
            add(scrollPane);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300,200);
            setVisible(true);
    
        }
        public static void main(String[] args) {
            new SimpleTest();
        }
    }
    
    
    
    

    back

    菜单

    • JMenuBar 菜单栏
    • JMenu 菜单栏上的一级菜单(也可以做二级菜单等)
    • JMenuItem 一级菜单下面的一个子菜单

    这三个东西,都是成群使用的,

    JMenuBar的用法

    方法 作用
    JmenuBar() 构建一个默认的菜单栏

    JMenu的方法

    方法 作用
    JMenu(String label) 用给定的标签构造一个菜单
    JMenuItem add(JMenuItem item) 添加一个菜单项(或一个菜单)
    JMenuItem add(String lable) 用给定标签将一个菜单项添加到菜单中,并且返回这个菜单项
    JMenuItem add(Action a) 用给定的动作将一个菜单项添加到菜单中,并返回这个菜单项
    void addSeparator() 添加一个分隔符行
    JMenuItem insert(JMenuItem menu,int index) 将一个新菜单项(或子菜单)添加到菜单的指定位置
    JMenuItem insert(Action a,int index) 用给定动作在菜单的指定位置添加一个新菜单项
    void insertSeparator(int index) 添加一个分隔符到菜单指定位置中
    void remove(index) 删除指定位置的菜单项
    void remove(JMenuItem item) 删除指定对象的菜单项

    JMenuItem的方法

    方法 作用
    JMenuItem() 创建没有文本或图标的JMenuItem
    JMenuItem(Action a) 创建一个菜单项,其属性取自指定的Action
    JMenuItem(Icon icon) 创建菜单项,使用指定的图标创建JMenuItem
    JMenuItem(String text) 创建菜单项,使用指定的文本创建JMenuItem
    JMenuItem(String text, Icon icon) 创建菜单项,使用指定的文本和图标创建JMenuItem

    当你申请了JMenuBar之后,做好一切之后,还需要把菜单栏添加到窗体的顶部的位置。这个时候应该使用setJMenuBar()方法,把你刚刚创建的菜单栏添加进去

    例子:

    
    package Learn;
    import javax.swing.*;
    public class SimpleTest extends JFrame{
        SimpleTest(){
            
            JMenuBar jMenuBar=new JMenuBar();
            JMenu menu=new JMenu("帮助");
            JMenuItem item=new JMenuItem("版本");
    
            menu.add(item);
            jMenuBar.add(menu);
            setJMenuBar(jMenuBar);
    
            add(new JTextField("we not use hello word"));
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(300,200);
            setVisible(true);
    
        }
        public static void main(String[] args) {
            new SimpleTest();
        }
    }
    
    

    back


    布局

    BorderLayout布局(边界布局)

    BorderLayout(边框布局管理器)是 Window、JFrame 和 JDialog 的默认布局管理器。边框布局管理器将窗口分为 5 个区域:

    • North
    • South
    • East
    • West
    • Center

    其中

    • North 表示北,将占据面板的上方
    • Soufe 表示南,将占据面板的下方
    • East表示东,将占据面板的右侧
    • West 表示西,将占据面板的左侧
    • 中间区域 Center 是在东、南、西、北都填满后剩下的区域

    其构造方法有:

    方法 作用
    BorderLayout() 创建一个 Border 布局,组件之间没有间隙
    BorderLayout(int hgap,int vgap) 创建一个 Border 布局,其中 hgap 表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素

    back

    FlowLayout布局(流式布局)

    • FlowLayout(流式布局管理器)是 JPanelJApplet 的默认布局管理器。

    FlowLayout 会将组件按照从上到下、从左到右的放置规律逐行进行定位。与其他布局管理器不同的是,FlowLayout 布局管理器不限制它所管理组件的大小,而是允许它们有自己的最佳大小

    其构造方法有:

    方法 作用
    FlowLayout() 创建一个布局管理器,使用默认的居中对齐方式和默认 5 像素的水平和垂直间隔
    FlowLayout(int align) 创建一个布局管理器,使用默认 5 像素的水平和垂直间隔,并且设置对齐方式
    FlowLayout(int align, int hgap,int vgap) 创建一个布局管理器,其中 align 表示组件的对齐方式;hgap 表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素

    back

    GridLayout布局(网格布局)

    GridLayout(网格布局管理器)为组件的放置位置提供了更大的灵活性。它将区域分割成行数(rows)和列数(columns)的网格状布局,组件按照由左至右、由上而下的次序排列填充到各个单元格中。

    其构造方法有:

    方法 作用
    GridLayout(int rows,int cols) 创建一个指定行(rows)和列(cols)的网格布局。布局中所有组件的大小一样,组件之间没有间隔
    GridLayout(int rows,int cols,int hgap,int vgap) 创建一个指定行(rows)和列(cols)的网格布局,并且可以指定组件之间横向(hgap)和纵向(vgap)的间隔,单位是像素

    其他不进行一一讲述......有兴趣参考:--->这是网站连接<---

    back


    事件监听器

    在JavaAWT中,事件源有一些方法,允许注册事件监听器,这些对象会对事件做出所需的响应

    所有的事件对象都派生于java.util.EventObject类。每个事件类型还有子类。

    AWT事件处理机制概要说明:

    • 事件监听器是一个实现了监听器接口(listener interface),也就是ActionListener的类的实例
    • 事件源对象能够注册监听器对象并向其发送事件对象
    • 当事件发生时,事件源将事件对象发送给所有注册的监听器
    • 监听器对象再使用事件对象中的信息决定如何对事件做出响应

    要实现ActionListener接口,必须有一个名为actionPerformed的方法,该方法接收一个ActionEvent作为参数

    也就是

    
    //重写方法
    public void actionPerformed(ActionEvent e) {
            //something here
    }
        
    

    如何知道是哪个发出的事件呢?

    在这个形参ActionEvent e中,可以用其方法,去知道这是哪个组件发出的

    • Object getSource() 这个方法返回的是一个Object类,很高兴,你又得用instanceof关键字去判断这个类属于什么了
    • String getActionCommand( )这个方法返回的是一个String类型的字符串,其内容是你最初定义的时候,给这个组件设定的字符串值。

    主要是以上两种方法,从而可以识别是哪个部件发出的指令。我习惯于第二种。

    实现了actionPerformed方法,但是你的部件并没有设置监听器,所以说你的部件还只是看一下,按上去完全不会动,也不会响应任何东西

    这个时候,应该对部件,调用方法,addActionListener(ActionListener l),对其添加事件监听器,而其中的参数,是一个实现了ActionListener的接口的类

    例:

    package Learn;
    
    
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class SimpleTest extends JFrame implements ActionListener {
        SimpleTest(){
            JButton btn=new JButton("测试");
            btn.addActionListener(this);//添加事件监听器
            add(btn);//添加组件到窗口
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭按钮作用
            setSize(300,200);//设置窗体大小
            setVisible(true);//设置窗体是否可见
    
        }
        public static void main(String[] args) {
            new SimpleTest();
        }
    
        //实现了ActionListener接口,就应该实现里面的方法
        @Override
        public void actionPerformed(ActionEvent e) {
            if("测试".equals(e.getActionCommand())){
                //这里是一个弹出的对话框
                JOptionPane.showMessageDialog(null,"你好");
            }
        }
    }
    
    
    

    back


    如果转载,请标明出处

    https://www.cnblogs.com/Yunrui-blogs/p/12825172.html

    这是小睿的博客,如果需要转载,请标注出处啦~ヾ(≧▽≦*)o谢谢。
  • 相关阅读:
    2020软件工程最后一次作业
    常用的10种算法

    赫夫曼编码
    哈希表(散列)
    查找算法
    排序算法
    递归

    软件工程最后一次作业
  • 原文地址:https://www.cnblogs.com/Yunrui-blogs/p/12825172.html
Copyright © 2011-2022 走看看