Java基础篇——Gui编程

AWT

抽象窗口工具

组件:按钮(button) 文本域(textarea)

​ 标签(label) 容器(container)...

  • Frame窗口

    Frame frame = new Frame(); 
    //设置窗口可见性
    frame.setVisible(true);
    //设置窗口大小,并固定不变(不可拉伸)
    frame.setSize(width,height);
    frame.setResizable(false);
    //窗口颜色
    frame.setBackground(new Color(219, 232, 84));
    //窗口弹出位置
    frame.setLocation(x,y);
    //frame.setBounds(x,y,width,height)一次性设置位置和大小
    
  • Panel面板

​ 面板不能单独存在

  • Panel panel = new Panel();
    frame.setLayout(null);//开启窗口布局
    ...//panel布局方法和frame窗口类似
    frame.add(panel);
    

布局模式

  • 流式布局

    //在布局方法调用时,显式声明为流式布局
    frame.setLayout(new FlowLayout());
    //FlowLayout参数中可以声明为左/右对齐或者居中
    //比如,左对齐:frame.setLayout(new FlowLayout(FlowLayout.LEFT));
    
  • 东西南北中布局

    frame.add(Component i,BorderLayout.SOUTH);//第一个参数是一个Component对象,右边是BorderLayout的属性,可以选择将对象放到(东西南北中)对应的位置
    
  • 表格布局

    frame.setLayout(new GridLayout(2,1));//将frame窗口分割为两行一列的表格
    //参数内容 行数、列数、(行间距、列间距)
    
事件监听
  • frame窗口的监听

    frame.addWindowListener(new WindowAdapter(){
        ...//设置监听事件,例如
            public void windowClosing(WindowEvent e) {//窗口关闭监听
                        System.exit(0);
                    }
            //窗口关闭时关闭程序
            //也可以重写其他窗口监听方法,比如窗口激活..
    });
    
  • 组件的监听

    //以按钮Button的监听为例
    button.addActionListener(new ActionListener(){
        ...//监听事件
    });
    
  • 监听的类也可以通过接口实现类实现

画笔方法

Frame类里的paint方法传输了一个画笔型的参数,该类型提供了很多画图方法,可以直接使用,举个例子:

  • public void paint(Graphics e){//画笔型的参数
            e.setColor(Color.BLUE);//设置画笔颜色
            e.drawOval(100,100,200,200);//画一个圆形
            e.setColor(Color.RED);
            e.drawRect(100,100,200,200);//画一个矩形
        }
    
鼠标监听
  • frame.addMouseListener(new MouseAdapter() {
              @Override
              public void mouseClicked(MouseEvent e) {//重写鼠标点击触发事件
                  ...
              }
          });
    
键盘监听
  •  frame.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode = e.getKeyCode();//getKeyCode方法捕获键盘码
                    ...//键盘码为KeyEvent内部属性
                        //比如KeyEvent.VK_UP是上键
                }
            });
    

Swing

  • JFrame窗口

    JFrame jFrame = new JFrame("My JFrame");
    //JFrame提供了更便捷的窗口关闭方法
    JFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    //JFrame的方法大多与Frame相同,但设置背景颜色这里,JFrame引入了容器的概念,将窗口视作一个容器,只能修改容器的颜色来达到修改背景颜色的目的
            Container container = jFrame.getContentPane();
            container.setBackground(Color.YELLOW);
    
  • JDialog弹窗

    //弹窗的初始化方法和窗口类似,可用触发事件触发弹窗,弹窗默认可关闭
    setTitle(String s);//设置弹窗名字
    setVisible(true);//设置弹窗可见
    setBounds(300,300,200,200);//设置位置和大小
    add(new JLabel("你点击了按钮",SwingConstants.CENTER));//添加标签
    
  • 动态追踪文本域的内容

    利用获取的Document对象,来添加一个DocumentListener监听器。因为该监听器就可以实现动态的跟踪文本框的输入内容。实现DocumentListener接口,必须重写该接口中的三个方法

    public class test implements DocumentListener {
    
        private JTextField textField;
    
        public void init() {
            textField = new JTextField();
            //获取与编辑器关联的模型
            Document doc = textField.getDocument();
    
            //添加DocumentListener监听器
            doc.addDocumentListener(this);
        }
    
        //该方法可以跟踪文本框中输入的内容
        public void insertUpdate(DocumentEvent e) {
            Document doc = e.getDocument();
            String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
        }
    
        //该方法可以跟踪文本框中移除的内容,例如:在文本框中点击Backspace
        public void removeUpdate(DocumentEvent e) {
            Document doc = e.getDocument();
            String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
        }
    
        //该方法可以跟踪当文本框中已存在的内容改变时,获取相应的值
        public void changedUpdate(DocumentEvent e) {
            Document doc = e.getDocument();
            String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
        }
    
    }
    
  • Icon图标

    图标绘制:

    class MyIcon extends JFrame implements Icon{
        private int width;
        private int height;
    
        public void init(){//初始化方法
            MyIcon myIcon = new MyIcon(15, 15);
            //创建标签的同时加入Icon图标
            JLabel jLabel = new JLabel("标签",myIcon,SwingConstants.CENTER);
            ...//设置窗口属性
            Container container = this.getContentPane();
            container.add(jLabel);//向容器中加入带有图标的标签
        }
        ...//构造方法
        @Override
        public void paintIcon(Component c, Graphics g, int x, int y) {
        g.fillOval(x,y,width,height);
        }//绘制图标
        @Override
        public int getIconWidth() {
            return width;
        }
        @Override
        public int getIconHeight() {
            return height;
        }
    }
    

    图片加载(加载目标图片作为图标)

    public class SecondIconTest extends JFrame{
        public SecondIconTest() {
            JLabel jLabel = new JLabel("图片Icon");
            //获得该类当前路径下名为img.png文件的路径
            URL url = SecondIconTest.class.getResource("img.png");
            jLabel.setIcon(new ImageIcon(url));//向标签中加入图片Icon
            jLabel.setToolTipText("这是个图标");//设置鼠标悬停显示
            ...//添加标签
            ...//设置窗口属性
        }
    }
    
  • 单选框、多选框

    //单选按钮
    JRadioButton button1 = new JRadioButton("Button1");
    JRadioButton button2 = new JRadioButton("Button2");
    //将按钮分到一组,不然可以多选
    ButtonGroup buttonGroup = new ButtonGroup();
    buttonGroup.add(button1);
    buttonGroup.add(button2);
    ...//向容器加入按钮
    //复选框
    JCheckBox button1 = new JCheckBox("Button1");
    JCheckBox button2 = new JCheckBox("Button2");
    ...//向容器加入复选框
    
  • 下拉框,列表框

    //下拉框 
    JComboBox jComboBox = new JComboBox();
    //可以用jComboBox.addItem()方法加入选项
    //列表框
    JList list = new JList();//直接向构造器里丢入集合对象即可
    
posted @ 2021-03-14 23:52  姬如乀千泷  阅读(142)  评论(0)    收藏  举报