GUI编程,了解学习监听事件
(更新1)前言:虽然GUI编程现在用到的非常少,但可以通过此类知识,
去更加深入的了解学习Java的常用类,组合,集合,mvc框架和事件监听
frame窗体
package com.cl.lesson01; import java.awt.*; //GUI,目的:了解mvc框架,了解监听 //1.Frame 组件和容器 public class TestFrame { public static void main(String[] args) { //Frame.JDK,看源码 Frame frame = new Frame("我的第一个Java图像界面窗口!"); //需要设置可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400); //设置背景颜色 Color frame.setBackground(new Color(30, 180, 143)); //弹出初始位置 frame.setLocation(200,200); //设置大小固定 frame.setResizable(false); } }
Panel面板
package com.cl.lesson01; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; //Panel 面板,可以看成是一个空间,但不能单独存在 //利用AWT,解决了窗口关闭 public class TestPanel { public static void main(String[] args) { Frame frame = new Frame();//窗口 Panel panel = new Panel();//面板 //设置布局 frame.setLayout(null); //坐标 frame.setBounds(300, 300, 500, 500); frame.setBackground(new Color(46, 198, 72)); //panel设置坐标,相当于frame,这个是内嵌的 panel.setBounds(50, 50, 400, 400); panel.setBackground(new Color(255, 10, 197)); //frame.add(panel) frame.add(panel); frame.setVisible(true); //监听事件,监听窗口关闭事件,System.exit(0) frame.addWindowListener(new WindowAdapter() { //窗口点击关闭时做的事情 @Override public void windowClosing(WindowEvent e) { //结束程序 System.exit(0); } }); } }
表格布局
package com.cl.lesson01; //表格布局 import java.awt.*; public class TestGridLayout { public static void main(String[] args) { Frame frame = new Frame("TestGridLayout"); Button btn1 = new Button("btn1"); Button btn2 = new Button("btn2"); Button btn3 = new Button("btn3"); Button btn4 = new Button("btn4"); Button btn5 = new Button("btn5"); Button btn6 = new Button("btn6"); frame.setLayout(new GridLayout(3,2)); frame.add(btn1); frame.add(btn2); frame.add(btn3); frame.add(btn4); frame.add(btn5); frame.add(btn6); frame.pack();//Java函数,将布局自动选择最好的方式布局 frame.setVisible(true); } }
排版练习
package com.cl.lesson01; import java.awt.*; public class LayoutTest1 { 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-1"),BorderLayout.EAST); p3.add(new Button("West-1"),BorderLayout.WEST); //中间4个 for (int i = 0; i < 4; i++) { p4.add(new Button("for-"+i)); } p3.add(p4,BorderLayout.CENTER); frame.add(p1); frame.add(p3); } }

test2
package com.cl.lesson01; //gui多个窗口 import java.awt.*; public class TestFrame2 { public static void main(String[] args) { //展示多个窗口 new MyFrame myFrame1= new MyFrame(100, 100, 200, 200, Color.blue); MyFrame myFrame2= new MyFrame(300, 100, 200, 200, Color.yellow); MyFrame myFrame3= new MyFrame(100, 300, 200, 200, Color.pink); MyFrame myFrame4= new MyFrame(300, 300, 200, 200, Color.red); } } class MyFrame extends Frame { static int id=0;//可能存在多个窗口,需要一个计数器 public MyFrame(int x,int y,int w,int h,Color color){ super("MyFrame"+(++id));//计数 setBackground(color); setBounds(x,y,w,h); setVisible(true); } } package com.cl.lesson01; //gui多个窗口 import java.awt.*; public class TestFrame2 { public static void main(String[] args) { //展示多个窗口 new MyFrame myFrame1= new MyFrame(100, 100, 200, 200, Color.blue); MyFrame myFrame2= new MyFrame(300, 100, 200, 200, Color.yellow); MyFrame myFrame3= new MyFrame(100, 300, 200, 200, Color.pink); MyFrame myFrame4= new MyFrame(300, 300, 200, 200, Color.red); } } class MyFrame extends Frame { static int id=0;//可能存在多个窗口,需要一个计数器 public MyFrame(int x,int y,int w,int h,Color color){ super("MyFrame"+(++id));//计数 setBackground(color); setBounds(x,y,w,h); setVisible(true); } }
事件监听简单实现
package com.cl.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 MyActionListener myActionListener = new MyActionListener(); button.addActionListener(myActionListener); 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 MyActionListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.out.println("aaa"); } }
package com.cl.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 MyActionListener myActionListener = new MyActionListener(); button.addActionListener(myActionListener); 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 MyActionListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.out.println("aaa"); } }
//两个按钮,实现同一个监听
//开始 停止
package com.cl.lesson02; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestActionTwo { public static void main(String[] args) { //两个按钮,实现同一个监听 //开始 停止 Frame frame = new Frame("开始-停止"); Button button1 = new Button("start"); Button button2 = new Button("stop"); //如果初始化setActionCommand,那么默认为button名 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()); } }
文本框监听
package com.cl.lesson02; //文本框监听 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestText01 { public static void main(String[] args) { //main方法只适合写启动代码!!! new MyFrame(); } } class MyFrame extends Frame{ public MyFrame(){ TextField textField = new TextField(); add(textField); //监听这个文本框输入的文字 MyActionListener2 myActionListener2 = new MyActionListener2(); //按下回车,就会触发输入框事件 textField.addActionListener(myActionListener2); //设置替换编码 textField.setEchoChar('*');//输入时显示的都是*,但到get到的确是你输入的文字 setVisible(true); pack(); } } class MyActionListener2 implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //因为getSource属于object,祖宗类,可以向下兼容,所以 TextField field=(TextField) e.getSource();//获取一些资源,返回一个对象 System.out.println(field.getText());//获得输入框中的文本 //回车清空,本质:当运行到此时。回车设置文本为空,自然就清除了 field.setText("");//null } }
实现简易计算器
package com.cl.lesson02; import netscape.security.UserTarget; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ///补充:oop原则,组合大于继承 //实现简易计算器 public class TestCalc { public static void main(String[] args) { new Calculator(); } } //计算器类 class Calculator extends Frame{ //属性 TextField num1,num2,num3; //方法 public Calculator(){ //3个文本框 num1 = new TextField(10);//字符数 num2 = new TextField(10); num3 = new TextField(20); //1个按钮 Button button = new Button("="); button.addActionListener(new MyCalculator(this)); //1个标签 Label label = new Label("+"); //布局 setLayout(new FlowLayout());//流式布局 add(num1); add(label); add(num2); add(button); add(button); add(num3); pack(); setVisible(true); }} //监听器类 class MyCalculator implements ActionListener { //获取三个变量 //private TextField num1,num2,num3; //优化版:获取计算器这个对象,在一个类中组合另外一个类 Calculator calculator=null; public MyCalculator( Calculator calculator){ this.calculator=calculator; } @Override public void actionPerformed(ActionEvent e) { //1.获得三个被加数 //int n1=Integer.parseInt(num1.getText()); //int n2=Integer.parseInt(num2.getText()); int n1= Integer.parseInt(calculator.num1.getText()); int n2= Integer.parseInt(calculator.num2.getText()); //2.将这个值+法运算后,放到第三个框 // num3.setText(""+(n1+n2)); calculator.num3.setText(""+(n1+n2)); //3.清除前两个框 //num1.setText(""); //num2.setText(""); calculator.num1.setText(""); calculator.num2.setText(""); } }

浙公网安备 33010602011771号