初级java知识点(8)
午休结束~要不就把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基础类的一部分。
Container是容器类,Component是组件。
容器类可以放容器也可以放组件。
JFrame:
JFrame是Frame的子类,属于容器组件,是顶层容器。
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
按照组件添加的顺序依次将组件从左到右放置到容器里,当达到容器边界时候,组件将放置到下一行。
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
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
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);
}
点击事件处理:
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:
使用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:
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:
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);