午休结束~要不就把Swing和JFrame这些东西先写上吧。先讲一下这种java基础的图形界面

so~本章节就写下Swing和JFrame

awt有一个最大的问题就是跨平台,win跑起来的界面和linux跑起来的界面是不一样的,swing解决了这个问题。

Swing并不是把awt全部的抛弃,而是将他升级或者完善的概念。并不是awt是一套独立的swing是一套独立的。

swing比较消耗内存,所以ibm又开发了SWT、JFace。

BS Browser浏览器-服务器Server

CS Client客户端-服务器Server

Swing是java的GUI(Graphical User Interface,图形用户界面)。

Swing是Java基础类的一部分。




java窗口自适应屏幕 java窗口默认布局_布局管理器


java窗口自适应屏幕 java窗口默认布局_Swing_02


Container是容器类,Component是组件。

容器类可以放容器也可以放组件。


JFrame:

JFrame是Frame的子类,属于容器组件,是顶层容器。


java窗口自适应屏幕 java窗口默认布局_Swing_03


java窗口自适应屏幕 java窗口默认布局_Swing_04


public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.setTitle("Hello JFrame");
   //设置大小,单位是像素
   frame.setSize(500, 400);
   //设置初始位置
   frame.setLocation(500, 200);
   //默认是不显示
   frame.setVisible(true);
   //关闭Frame(设置Frame默认关闭时候的操作,就是当关闭时候退出)
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}



面板JPanel组件:

1、属于容器类组件,可以加入别的组件。

2、默认布局管理器是:流式布局FlowLayout

JFrame用来做主页面框架也可以用来做顶级窗体,要想把控件放在该界面中,必须把控件放在JPanel中,然后再把JPanel放在JFrame中,JPanel作为一个容器使用。

JPanel是一个静态控制组件,可以用来显示一行静态信息,不能接受用户的输入。它必须放在象JFrame这样的顶级窗口上才能输出。

JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel。如果你直接在JFrame上放也可以,但是首先不规范,然后要是过于复杂的界面你准备如何处理这么多控件呢?你可以写个复杂的界面,应该就可以感受到这种区别了,JPanel只是普通页面

JPanel可以放在JFrame中,反之不行


布局管理器:

概念:组件在容器中的位置和大小是由布局管理器来决定的,所有的容器都会使用一个

布局管理器,通过他来自动进行组件的布局管理。

种类:

1、流式布局管理器FlowLayout

2、边界布局管理器BorderLayout

3、网格布局管理器GridLayout

4、BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的

5、卡片布局管理器CardLayout

6、网格包布局管理器GridBagLayout

JFrame 缺省布局使用的是边界布局管理器(BorderLayout).

JPanel 缺省布局使用的是流式布局管理器(FlowLayout).

1、流式布局管理器FlowLayout

按照组件添加的顺序依次将组件从左到右放置到容器里,当达到容器边界时候,组件将放置到下一行。


java窗口自适应屏幕 java窗口默认布局_java窗口自适应屏幕_05


public class FlowLayoutDemo {
public static void main(String[] args) {
 // 创建JFrame
      JFrame frame = new JFrame("FlowLayoutDemo");
      JPanel panel = new JPanel();
      frame.add(panel);
 //FlowLayout默认是居中显示,可以设置向左或者向右对齐
      panel.setLayout(new FlowLayout(FlowLayout.LEFT));
 //创建组件
     JButton button1 = new JButton("张三");
     JButton button2 = new JButton("李四");
     JButton button3 = new JButton("王五");
     JButton button4 = new JButton("赵六");
     JButton button5 = new JButton("小李");
     JButton button6 = new JButton("小强");
 //添加组件
      panel.add(button1);
      panel.add(button2);
      panel.add(button3);
      panel.add(button4);
      panel.add(button5);
      panel.add(button6);
 // 设置大小,单位是像素
      frame.setSize(300, 400);
 // 设置初始位置
      frame.setLocation(500, 200);
 // 默认是不显示
      frame.setVisible(true);
 // 关闭Frame(设置Frame默认关闭时候的操作,就是当关闭时候退出)
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}


2、边界布局管理器BorderLayout


java窗口自适应屏幕 java窗口默认布局_java窗口自适应屏幕_06


public class BorderLayoutDemo {
public static void main(String[] args) {
 // 创建JFrame
     JFrame frame = new JFrame("FlowLayoutDemo");
     JPanel panel = new JPanel();
     frame.add(panel);
 // 设置布局管理器
 panel.setLayout(new BorderLayout());
 //创建组件
     JButton northButton = new JButton("北部");
     JButton southButton = new JButton("南部");
     JButton westButton = new JButton("西部");
     JButton eastButton = new JButton("东部");
     JButton centerButton = new JButton("中部");
     panel.add(northButton, BorderLayout.NORTH);
     panel.add(southButton, BorderLayout.SOUTH);
     panel.add(westButton, BorderLayout.WEST);
 //panel.add(eastButton, BorderLayout.EAST);
     panel.add(centerButton, BorderLayout.CENTER);
 // 设置大小,单位是像素
     frame.setSize(500, 500);
 // 设置初始位置
     frame.setLocation(500, 200);
 // 默认是不显示
     frame.setVisible(true);
 // 关闭Frame(设置Frame默认关闭时候的操作,就是当关闭时候退出)
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}


3、网格布局管理器GridLayout


java窗口自适应屏幕 java窗口默认布局_java窗口自适应屏幕_07


public class GridLayoutDemo {
public static void main(String[] args) {
      JFrame frame = new JFrame();
      frame.setTitle("Hello JFrame");
      JPanel panel = new JPanel();
      frame.add(panel);
 //设置布局
      panel.setLayout(new GridLayout(3, 3));
 //创建组件
      JButton[] buttons = new JButton[9];
      for (int i = 0; i < buttons.length; i++) {
       buttons[i]  = new JButton((i + 1) + "");
      }
 //添加组件
      for (int i = 0; i < buttons.length; i++) {
       panel.add(buttons[i]);
      }
 // 设置大小,单位是像素
      frame.setSize(500, 500);
 // 设置初始位置
      frame.setLocation(500, 200);
 // 默认是不显示
      frame.setVisible(true);
 // 关闭Frame(设置Frame默认关闭时候的操作,就是当关闭时候退出)
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}



点击事件处理:


java窗口自适应屏幕 java窗口默认布局_控件_08


public class CalDemo {
public static void main(String[] args) {
 // 创建JFrame
      JFrame frame = new JFrame("FlowLayoutDemo");
      JPanel panel = new JPanel();
      frame.add(panel);
 // 设置布局
      panel.setLayout(new FlowLayout(FlowLayout.LEFT));
 // 创建组件
 //文本框1
      JTextField textField1 = new JTextField();
      textField1.setPreferredSize(new Dimension(120, 30));
      panel.add(textField1);
 // + 号
      JLabel label = new JLabel("+");
      label.setPreferredSize(new Dimension(30, 30));
      panel.add(label);
 //文本框2
     JTextField textField2 = new JTextField();
      textField2.setPreferredSize(new Dimension(120, 30));
      panel.add(textField2);
 // = button
     JButton button = new JButton("=");
      panel.add(button);
 // label 结果
     JLabel resultLabel = new JLabel();
      panel.add(resultLabel);
 //给button添加点击事件
      button.addActionListener(new ActionListener() {
 @Override
public void actionPerformed(ActionEvent e) {
  // 点击后出发这个方法执行,点击之后想完成的操作写到这里
          String num1 = textField1.getText();
           System.out.println(num1);
          String num2 = textField2.getText();
           System.out.println(num2);
          int result = Integer.parseInt(num1) + Integer.parseInt(num2);
 //resultLabel.setText(result + "");
 //resultLabel.setText(String.valueOf(result));
           resultLabel.setText(Integer.toString(result));
        }
     });
 // 设置JFrame属性
 // 禁止用户改变窗口大小 resize able 能够
      frame.setResizable(false);
      frame.setSize(500, 300);
      frame.setLocation(500, 200);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}



案例1:


java窗口自适应屏幕 java窗口默认布局_控件_09


使用GridLayout,三行一列,每一行是一个JPanel


public class LoginDemo {
public static void main(String[] args) {
 // 创建JFrame
     JFrame frame = new JFrame("FlowLayoutDemo");
      JPanel panel = new JPanel();
      frame.add(panel);
 // 设置布局
      panel.setLayout(new GridLayout(3, 1));
 // 创建组件
 // namePanel
      JPanel namePanel = new JPanel();
      JLabel nameLabel = new JLabel("用户名:");
      JTextField nameTextFiled = new JTextField(10);
      namePanel.add(nameLabel);
      namePanel.add(nameTextFiled);
      panel.add(namePanel);
 // passwordPanel
      JPanel passwordPanel = new JPanel();
      JLabel passwordLabel = new JLabel("密码:");
      JTextField passwordTextFiled = new JTextField(10);
      passwordPanel.add(passwordLabel);
      passwordPanel.add(passwordTextFiled);
      panel.add(passwordPanel);
 // loginPanel
      JPanel loginPanel = new JPanel();
      JButton loginButton = new JButton("登录");
      JButton cancelButton = new JButton("取消");
      loginPanel.add(loginButton);
      loginPanel.add(cancelButton);
      panel.add(loginPanel);
 // 设置JFrame属性
 // 禁止用户改变窗口大小 resize able 能够
      frame.setResizable(false);
      frame.setSize(300, 150);
      frame.setLocation(500, 200);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}


案例2:


java窗口自适应屏幕 java窗口默认布局_Swing_10


public class RegisterDemo {
public static void main(String[] args) {
 // 创建JFrame
      JFrame frame = new JFrame("FlowLayoutDemo");
      JPanel panel = new JPanel();
      frame.add(panel);
 // 设置布局
      panel.setLayout(new GridLayout(3, 1));
 // 创建组件
 // sportPanel
      JPanel sportPanel = new JPanel();
      JLabel sportLabel = new JLabel("你喜欢的运动:");
      JCheckBox checkBox1 = new JCheckBox("足球");
      JCheckBox checkBox2 = new JCheckBox("篮球");
      JCheckBox checkBox3 = new JCheckBox("网球");
      sportPanel.add(sportLabel);
      sportPanel.add(checkBox1);
      sportPanel.add(checkBox2);
      sportPanel.add(checkBox3);
      panel.add(sportPanel);
 // genderPanel
      JPanel genderPanel = new JPanel();
      JLabel genderLabel = new JLabel("你的性别:");
      JRadioButton maleRadioButton = new JRadioButton("男");
      JRadioButton femaleRadioButton = new JRadioButton("女");
      genderPanel.add(genderLabel);
 //一定要把JRadioButton放到一个ButtonGroup
      ButtonGroup buttonGroup = new ButtonGroup();
      buttonGroup.add(maleRadioButton);
      buttonGroup.add(femaleRadioButton);
      genderPanel.add(maleRadioButton);
      genderPanel.add(femaleRadioButton);
      panel.add(genderPanel);
 // loginPanel
      JPanel loginPanel = new JPanel();
      JButton loginButton = new JButton("登录");
      JButton cancelButton = new JButton("取消");
      loginPanel.add(loginButton);
      loginPanel.add(cancelButton);
      panel.add(loginPanel);
 // 设置JFrame属性
 // 禁止用户改变窗口大小 resize able 能够
 // frame.setResizable(false);
      frame.setSize(400, 200);
      frame.setLocation(500, 200);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}


案例3:


java窗口自适应屏幕 java窗口默认布局_java窗口自适应屏幕_11


public class ComboBoxDemo {
public static void main(String[] args) {
 // 创建JFrame
      JFrame frame = new JFrame("FlowLayoutDemo");
      JPanel panel = new JPanel();
      frame.add(panel);
 // 设置布局
      panel.setLayout(new GridLayout(2, 1));
 // 创建组件
 // ComboBox
      JPanel comboBoxPanel = new JPanel();
      JLabel comboBoxLabel = new JLabel("你的籍贯:");
      String[] homes = { "北京", "青岛", "济南", "上海" };
      JComboBox comboBox = new JComboBox(homes);
      comboBoxPanel.add(comboBoxLabel);
      comboBoxPanel.add(comboBox);
      panel.add(comboBoxPanel);
 // JList
     JPanel listPanel = new JPanel();
     JLabel listLabel = new JLabel("学习语言:");
     String[] languages = { "Java", "PHP", "Python", "Android", "C", "C#" };
     JList<String> list = new JList<>(languages);
 //默认JList全部显示,添加滚动之后可以控制显示
      list.setVisibleRowCount(3);
 //使用JScrollPane包裹一下实现滚动效果
     JScrollPane scrollPane = new JScrollPane(list);
      listPanel.add(listLabel);
 //listPanel.add(list);
      listPanel.add(scrollPane);
      panel.add(listPanel);
 // 设置JFrame属性
 // 禁止用户改变窗口大小 resize able 能够
 // frame.setResizable(false);
      frame.setSize(300, 300);
      frame.setLocation(500, 200);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}



先整理这么多,下一节回归逻辑的,整一下异常或者证IO流吧