GUI

GUI

1、组件和容器

import java.awt.*;

/*
GUI第一个界面
*/
public class FrameTest01 {

  public static void main(String[] args) {
      //Frame窗口
      Frame frame =new Frame("第一个GUI界面");

      //设置可见性
      frame.setVisible(true);
      //设置长宽
      frame.setSize(400,400);
      //设置背景颜色
      frame.setBackground(new Color(176, 58, 58));
      //弹出的初始位置
      frame.setLocation(100,200);

      //设置大小固定
      frame.setResizable(false);

  }
}

image-20200525154921335

问题:无法关闭,只能关闭程序!


2、面板Panel

public class PanelTest01 {
  public static void main(String[] args) {
      Frame frame = new Frame();
      //布局的概念
      Panel panel = new Panel();

      frame.setLayout(null);

      //窗口大小位置
      frame.setBounds(100,100,500,500);
      frame.setBackground(new Color(154, 15, 212, 255));

      //面板的大小位置设置
      panel.setBounds(50,50,400,400); //相对于窗口的位置
      panel.setBackground(new Color(57, 190, 64));

      //将面板放进窗口
      frame.add(panel);

      //将窗口可视化
      frame.setVisible(true);

      //监听事件
      //适配器模式
      frame.addWindowListener(new WindowAdapter() {
          @Override
          public void windowClosing(WindowEvent e) {
              //结束窗口
              //0表示结束,1表示有异常的结束
              System.exit(0);

          }
      });

  }
}

image-20200525204129601


3、布局管理器

  • 流式布局

    public class FlowLayoutTest01 {
      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());

          //窗口大小以及位置
          frame.setBounds(200,200,400,400);

          //将按钮添加到窗口
          frame.add(button1);
          frame.add(button2);
          frame.add(button3);

          //设置可视化
          frame.setVisible(true);

      }
    }
  • 东南西北中

    public class BorderLayoutTest01 {
      public static void main(String[] args) {
          Frame frame = new Frame("MyBorderLayout");

          Button east = new Button("east");
          Button west = new Button("west");
          Button north = new Button("north");
          Button south = new Button("south");
          Button center = new Button("center");

          frame.add(east,BorderLayout.EAST);
          frame.add(west,BorderLayout.WEST);
          frame.add(north,BorderLayout.NORTH);
          frame.add(south,BorderLayout.SOUTH);
          frame.add(center,BorderLayout.CENTER);

          frame.setBounds(100,100,500,400);
          frame.setVisible(true);
      }
    }
  • 表格布局

    public class GridTest {
      public static void main(String[] args) {
          Frame frame = new Frame("MyBorderLayout");

          Button button1 = new Button("button1");
          Button button2 = new Button("button2");
          Button button3 = new Button("button3");
          Button button4 = new Button("button4");
          Button button5 = new Button("button5");
          Button button6 = new Button("button6");

          frame.setLayout(new GridLayout(3,2));

          frame.add(button1);
          frame.add(button2);
          frame.add(button3);
          frame.add(button4);
          frame.add(button5);
          frame.add(button6);

          frame.pack();//自动填充
          frame.setVisible(true);
      }
    }

作业:

public class Test526 {
  public static void main(String[] args) {
      //主窗口分为两行一列的两个面板
      Frame frame = new Frame("MyFrame");
      frame.setLayout(new GridLayout(2,1));

      //其中上面面板为东西中布局,中间面板为2行1列布局
      Panel panel1 = new Panel(new BorderLayout());
      Panel panel2 = new Panel(new GridLayout(2,1));
      //下面面板同为东西中布局,中间面板为2行2列布局
      Panel panel3 = new Panel(new BorderLayout());
      Panel panel4 = new Panel(new GridLayout(2,2));

      //将面板添加到窗口中
      frame.add(panel1);
      frame.add(panel2);
      frame.add(panel3);
      frame.add(panel4);

      //为panel1添加组件
      Button btn1 = new Button("btn1");
      Button btn2 = new Button("btn2");
      panel1.add(btn1,BorderLayout.WEST);
      panel1.add(btn2,BorderLayout.EAST);
      panel1.add(panel2,BorderLayout.CENTER);

      //给panel2添加组件
      Button btn3 = new Button("btn3");
      Button btn4 = new Button("btn4");
      panel2.add(btn3);
      panel2.add(btn4);

      //为panel3添加组件
      Button btn5 = new Button("btn5");
      Button btn6 = new Button("btn6");
      panel3.add(btn5,BorderLayout.WEST);
      panel3.add(btn6,BorderLayout.EAST);
      panel3.add(panel4,BorderLayout.CENTER);

      //给panel4添加组件
      Button btn7 = new Button("btn7");
      Button btn8 = new Button("btn8");
      Button btn9 = new Button("btn9");
      Button btn10 = new Button("btn10");
      panel4.add(btn7);
      panel4.add(btn8);
      panel4.add(btn9);
      panel4.add(btn10);


      frame.pack();
      frame.setVisible(true);

  }
}

4、事件监听

public class ActionTest01 {
  public static void main(String[] args) {
      Frame frame = new Frame();
      Button button = new Button("btn");
      frame.setSize(400,500);

      MyActionListener myActionListener = new MyActionListener();
      button.addActionListener(myActionListener);

      frame.add(button,BorderLayout.CENTER);

      windowClose(frame);

//       frame.pack();
      frame.setVisible(true);
  }
  //关闭窗体的时间
  public static void windowClose(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("say hello");
  }
}

5、输入框TextField

public class TextTest {
  public static void main(String[] args) {
      //启动
      new MyFrame();
  }
}
class MyFrame extends Frame{
  public MyFrame(){
      TextField textField = new TextField();
      add(textField);

      //监听文本框
      MyActionListener02 myActionListener02 = new MyActionListener02();
      //按下回车键,就会触发这个输入框的监听事件
      textField.addActionListener(myActionListener02);

      //设置替换编码
      textField.setEchoChar('*');

      pack();
      setVisible(true);
  }
}
class MyActionListener02 implements ActionListener{
  @Override
  public void actionPerformed(ActionEvent e) {
      TextField field=(TextField) e.getSource();//获得资源
      System.out.println(field.getText());//获得文本框的文本
      field.setText("");
  }
}

6、简易计算器,组合+内部类

public class CalcTest {
  public static void main(String[] args) {
      new MyCalc().loadFrame();
  }
}
class MyCalc extends Frame{
  //属性
  TextField num1,num2,num3;

  //方法
  public void loadFrame(){
      num1 = new TextField(10);//字符数
      num2 = new TextField(10);//字符数
      num3 = new TextField(20);//字符数
      Button button = new Button("=");
      Label label = new Label("+");

      button.addActionListener(new CalculatorActionListener());

      //流式布局
      setLayout(new FlowLayout());

      add(num1);
      add(label);
      add(num2);
      add(button);
      add(num3);
      pack();
      setVisible(true);

  }
  private class CalculatorActionListener implements ActionListener {

      @Override
      public void actionPerformed(ActionEvent e) {
          //将文本框里的文本转换成int类型
          int i1 = Integer.parseInt(num1.getText());
          int i2 = Integer.parseInt(num2.getText());

          //将结果放在第三个框
          num3.setText(""+(i1+i2));

          //清空num1,num2两个文本框
          num1.setText("");
          num2.setText("");

      }
  }

}
posted @ 2020-05-28 17:33  lee的学习博客  阅读(198)  评论(0)    收藏  举报