GUI编程

GUI编程

1、简介

Gui的核心技术Swing AWT

  • 界面不美观

  • 需要jre环境

2、AWT

  • 包含了很多类和接口!

  • 元素:窗口,按钮,文本框

  • java.awt

2.1、组件和容器

1.Frame

停止Java程序关闭窗口

封装多窗口:

 package com;
 
 import java.awt.*;
 public class TestFrame2 {
     public static void main(String[] args) {
         //多个窗口
         MyFrame myFrame1 = new MyFrame(100, 100, 200, 200, Color.blue);
         MyFrame myFrame2 = new MyFrame(300, 100, 200, 200, Color.red);
         MyFrame myFrame3 = new MyFrame(100, 300, 200, 200, Color.white);
         MyFrame myFrame4 = new MyFrame(300, 300, 200, 200, Color.yellow);
 
    }
 }
 class MyFrame extends Frame{
     static int id = 0;
 
     public MyFrame(int x,int y,int w,int h,Color color) {
         super("MyFrame+"+(++id));
         setVisible(true);
         setBounds(x,y,w,h);
         setBackground(color);
    }
 }


2.面板panel

 package com;
 
 import java.awt.*;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 
 public class TestPanel {
     public static void main(String[] args) {
         Frame frame = new Frame();
         Panel panel = new Panel();
 
         //设置布局
         frame.setLayout(null);
 
         //坐标
         frame.setBounds(300,300,500,500);
         frame.setBackground(Color.blue);
 
         //panel设置坐标
         panel.setBounds(50,50,400,400);
         panel.setBackground(Color.red);
 
         //frame.add(panel)
         frame.add(panel);
 
         frame.setVisible(true);
 
         //监听窗关闭
         frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 //结束程序
                 System.exit(2);
            }
        });
    }
 }

3.布局管理器

  • 流式布局

     package com;
     
     import java.awt.*;
     
     public class TestFlowLayout {
         public static void main(String[] args) {
             Frame frame = new Frame();
     
             Button button1 = new Button("button1");
             Button button2 = new Button("button2");
             Button button3 = new Button("button3");
     
             frame.setLayout(new FlowLayout(FlowLayout.CENTER));
     
             frame.setSize(200,200);
     
             frame.add(button1);
             frame.add(button2);
             frame.add(button3);
     
             frame.setVisible(true);
        }
     }

  • 东西南北中布局

     package com;
     
     import java.awt.*;
     
     public class TestBorderLayout {
         public static void main(String[] args) {
             Frame frame = new Frame();
     
             Button East = new Button();
             Button West = new Button();
             Button South = new Button();
             Button North = new Button();
             Button Center = new Button();
     
             frame.add(East,BorderLayout.EAST);
             frame.add(West,BorderLayout.WEST);
             frame.add(South,BorderLayout.SOUTH);
             frame.add(North,BorderLayout.NORTH);
             frame.add(Center,BorderLayout.CENTER);
     
             frame.setVisible(true);
     
             frame.setSize(200,200);
        }
     }

  • 表格布局

 package com;
 
 import java.awt.*;
 
 public class TestGridLayout {
     public static void main(String[] args) {
         Frame frame = new Frame();
 
         Button one = new Button("one");
         Button two = new Button("two");
         Button three = new Button("three");
         Button four = new Button("four");
         Button five = new Button("five");
         Button six = new Button("six");
         
         frame.setLayout(new GridLayout(3,2));
         
         frame.add(one);
         frame.add(two);
         frame.add(three);
         frame.add(four);
         frame.add(five);
         frame.add(six);
         
         frame.setVisible(true);
         
         frame.pack();//自动布局
    }
 }

 


 package com;
 
 import java.awt.*;
 
 public class ExDemo {
     public static void main(String[] args) {
         Frame frame = new Frame();
 
         frame.setSize(400,300);
 
         frame.setLocation(300,200);
 
         frame.setBackground(new Color(90, 37, 37));
 
         frame.setVisible(true);
 
         frame.setLayout(new GridLayout(2,1));
 
         Panel panel1 = new Panel(new BorderLayout());
         Panel panel2 = new Panel(new GridLayout(2,1));
         Panel panel3 = new Panel(new BorderLayout());
         Panel panel4 = new Panel(new GridLayout(2,1));
 
         panel1.add(new Button("East-1"),BorderLayout.EAST);
         panel1.add(new Button("West-2"),BorderLayout.WEST);
         panel2.add(new Button("p2-1"));
         panel2.add(new Button("p2-2"));
         panel1.add(panel2,BorderLayout.CENTER);
 
         panel3.add(new Button("East-2"),BorderLayout.EAST);
         panel3.add(new Button("West-2"),BorderLayout.WEST);
         for (int i = 0; i < 4; i++) {
             panel4.add(new Button("for-"+i));
        }
         panel3.add(panel4,BorderLayout.CENTER);
 
         frame.add(panel1);
         frame.add(panel3);
 
 
    }
 }

 

 


总结

  1. Frame是一个顶级窗口

  2. Panel无法单独显示,必须添加到某个容器中

  3. 布局管理器

    • 流式

    • 东西南北中

    • 表格

  4. 大小,定位,背景颜色,可见性,监听


4.事件监听

事件监听:当某个事件发生的时候,干什么?

 package com;
 
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 
 public class TestAxctionEvent {
     public static void main(String[] args) {
         Frame frame = new Frame();
 
         Button button = new Button();
 
         MyActionListener myActionListener = new MyActionListener();
         button.addActionListener(myActionListener );
 
         frame.add(button,BorderLayout.CENTER);
         frame.pack();
 
         windowCloss(frame);
         frame.setVisible(true);
 
    }
     //事件监听
     private static void windowCloss(Frame frame){
         frame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(WindowEvent e) {
                 System.exit(0);
            }
        });
    }
 }
 class  MyActionListener implements ActionListener{
     @Override
     public void actionPerformed(ActionEvent e) {
         System.out.println("aaa");
    }
 }


多个按钮只写一个监听类

 package com;
 
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
 public class TestAction {
     public static void main(String[] args) {
         Frame frame = new Frame("开始-停止");
         Button button1 = new Button("start");
         Button button2 = new Button("stop");
 
         Mymonitor mymonitor = new Mymonitor();
 
         button1.addActionListener(mymonitor);
         button2.addActionListener(mymonitor);
 
 
         frame.add(button1,BorderLayout.NORTH);
         frame.add(button2,BorderLayout.SOUTH);
 
         frame.pack();
         frame.setVisible(true);
    }
 }
 class Mymonitor implements ActionListener{
     @Override
     public void actionPerformed(ActionEvent e) {
         System.out.println("点击"+e.getActionCommand());
 
    }
 }


posted @ 2021-03-10 21:11  楚楚阔爱  阅读(77)  评论(0)    收藏  举报