图形用户界面设计

作业讲评
  • 泛型不能随便用,有些类里面没有某些运算符,所以编译不能通过。
    public <T> T add(T x,T y)
    {
      return a+b;
    }
    //编译无法通过
    
  • GenericNum.java
    //使用泛型方法
    class NumOp<T extends Number>{
      public void add(T a,T b){
          if(a.getClass()==Integer.class){
              int sum=a.intValue()+b.intValue();
              System.out.println(sum);
          }
          else if(a.getClass()==Double.class){
              //...
          }
      }
    }
    //使用泛型类 自己写康康
    
  • 记住ArrayList类的常用函数,add(),get(),contain()等等。

Awt和Swing(了解了解)

  1. awt和swing图形用户界面包
    • 图形用户界面GUI(Graphics User Interface) 组件:菜单、文本框、按钮、画板、窗口和对话框等。
    • GUI元素(组件)构成Java的抽象窗口工具包。
    • Java在AWT抽象窗口工具包的基础上,开发出javax.swing图形用户界面包;Swing的组件是AWT的扩展。
    • Swing的好处就是可以跨平台,各种平台上显示出的图形界面是一致的。它大多数调用AWT里面的东西。
    • AWT是重量级组件,Swing是轻量组件。
  2. swing组件的层次结构
    • 本节课重要的:JPanel、JButton、Frame、JFrame。
    • JPanel、JButton不能独立显示,需要放在窗口或对话框 (Frame、JFrame、Dialog、JDialog)上显示。



  3. Component & Contianer
  • swing组件可以分为两种类型,一种是JComponent类,另一种是Window类。两者的区别是JComponent组件类主要包括一些不能独立显示的组件(即必须依赖于中间容器才能显示),而Window组件类主要包括了一些可以独立显示的组件。
  • 组件依赖于中间容器,中间容器依赖于顶层容器。

    • 顶层容器(即Window组件):JFrame、JApplet、JDialog、Jwindow;
    • 中间容器:JPanel、JScrollPane、JSplitOPane、JToolBar;这些容器可以充当载体,但也是U币可以独立显示的组件,必须依附在顶层容器内;
    • 特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame、JLayeredPane等;
    • 基本组件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu、JTextField。
  1. 窗体容器JFrame类

    • JFrame是带有标题、边框的顶层窗体。窗体是一个容器,在其内部可以添加其它组件。(就比如说按钮需要安装在窗体上)
    • JFrame类的方法
    • setDefaultCloseOperation(EXIT_ON_CLOSE)为设置窗体关闭按钮的关闭动作。如果没有该语句,当用户视图关闭窗口时,窗体只是隐藏,并没有真正从内存中退出。
    • 显示多个窗口
      import javax.swing.*;
      public class MultiJFrameTest{  
      public static void main(String args[]){ 
          MyFrame f1 = new MyFrame(100,100,200,200);
          MyFrame f2 = new MyFrame(300,100,200,200);
          MyFrame f3 = new MyFrame(100,300,200,200);
          MyFrame f4 = new MyFrame(300,300,200,200);  
      } 
      }
      class MyFrame extends JFrame {
      static int id =0;   
      MyFrame (int x,int y,int w, int h){
          super("Frame" + (++id));
          setLayout(null);  //清空布局管理器,即绝对布局
          setBounds(x,y,w,h);
          setVisible(true);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      }
      }
      
  2. 按钮类
  • 按钮JButton类的常用方法

  • 构造一个带按钮的窗体

     import java.awt.*;
     import javax.swing.*;
     public class ButtonTest{
        public static void main(String args[]){ 
            new MyButton();
        }
     }
     class MyButton extends JFrame{
        //成员变量
        JButton btn;
        //Button btn;  //Button类呢?会长啥样的按钮?
        //构造函数:初始化
        MyButton(){
            setTitle("显示按钮");
            setSize(300,200);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            btn = new JButton("确定");
            //btn = new Button("确定");
            setLayout(new FlowLayout()); //设置布局, 没有这句语句,会怎样?
            add(btn);   //把btn添加到窗体中
            validate(); //窗体中的组件可视化(生效当前修改)
        }
     }
  1. 面板JPanel类
  • 面板JPanel是一个可放置其它组件的容器。作为普通容器,它必须放置到一个顶层容器(窗体)之内。我们可以在JPanel中使用add()方法放置其它组件。面板主要用于合理安排界面布局。

  • 创建面板的一般步骤:

    • (1)创建面板对象:JPanel myPanel=new JPanel();
    • (2)将面板添加到窗体容器中:add(myPanel);
    • (3)把组件放置到面板上:myPanel.add(其它组件);
  • 例子:
     import java.awt.*;
     import javax.swing.*;
     public class PanelTest
     {
         public static void main(String[] args) {
               new MyPanel();
         }
     }
     class MyPanel extends JFrame{
        //Panel p1;
        JPanel p1;
        JButton btn1;
        Button btn2;
        MyPanel() {
            setTitle("面板容器示例1");
            setSize(200,150);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
                //p1 = new Panel();
                p1 = new JPanel();
                btn1 = new JButton("JButton");
                btn2 = new Button("Button") ;
                setLayout(new FlowLayout());
                //将面板容器加入到窗体
                add(p1);
            //将其他组件加入到面板容器中
                p1.add(btn1);
                p1.add(btn2);
                p1.setBackground(Color.red);
            //p1.setBackground(new Color(120,200,102));
            validate();//*/
         }
     }