[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQcTso0S-1667219199834)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20221031192815686.png)]
分析过程
代码实现
package com.kuang.lesson01;
import java.awt.*;
public class ExDemo {
public static void main(String[] args) {
//总Frame
Frame frame = new Frame();
frame.setSize(400,300);
frame.setLocation(300,400);
frame.setBackground(Color.BLACK);
frame.setVisible(true);
frame.setLayout(new GridLayout(2,1));
//4个面板
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new GridLayout(2,1));
Panel p3 = new Panel(new BorderLayout());
Panel p4 = new Panel(new GridLayout(2,2));
//上面
p1.add(new Button("East-1"),BorderLayout.EAST);
p1.add(new Button("West-1"),BorderLayout.WEST);
p2.add(new Button("p2-btn-1"));
p2.add(new Button("p2-btn-2"));
p1.add(p2,BorderLayout.CENTER);
//下面
p3.add(new Button("East-2"),BorderLayout.EAST);
p3.add(new Button("West-2"),BorderLayout.WEST);
//中间的四个
for (int i = 0; i < 4; i++) {
p4.add(new Button("for-"+i));
}
p3.add(p4,BorderLayout.CENTER);
frame.add(p1);
frame.add(p3);
}
}
总结:
-
Frame是一个顶级窗口
-
Panel无法单独显示,必须添加到某个容器中
-
布局管理器
- 流式管理器
- 东西南北中
- 表格管理
-
大小(setSize),定位(setLocation),背景颜色(setBackground(Color.BLACK)),可见性(setVisible(true)),监听!关闭窗口(
-
frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } });
-
事件监听:当某个事情发生的时候,干什么?
package com.kuang.lesson02; 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 TestActionEvent { public static void main(String[] args) { //按下按钮的时候,触发一些事件 Frame frame = new Frame(); Button button = new Button(); //因为addActionListener需要一个 ActionListener,所以我们需要构造一个 ActionListener MyActionListenter myActionListenter = new MyActionListenter(); button.addActionListener(myActionListenter); frame.add(button,BorderLayout.CENTER); frame.pack(); windowClose(frame);//关闭窗口 frame.setVisible(true); } //关闭窗体的事件 private static void windowClose(Frame frame){ frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } } //事件监听 class MyActionListenter implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.out.println("aaa"); } }
-
多个按钮共享一个事件
package com.kuang.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionEvent02 { public static void main(String[] args) { //两个按钮实现同一个监听 Frame frame = new Frame("开始-停止"); Button button1 = new Button("start"); Button button2 = new Button("stop"); //可以显示的定义会触发返回的命令,如果不显示定义,则会走默认的值 //可以多个按钮只写一个监听类 button2.setActionCommand("button2-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) { //e.getActionCommand()获得按钮的信息 System.out.println("按钮被点击了:msg"+e.getActionCommand()); } }