第十二周课程总结

上机课实验:计算器

源代码:

package diyishiba;
import java.awt.*;
import javax.swing.*;
public class Jisuanqi {

	public static void main(String[] args) {
		JFrame jfr=new JFrame("计算器");
		JTextField jte=new JTextField(30);
		JButton jbu11=new JButton("%");
		JButton jbu12=new JButton("sqrt");
		JButton jbu13=new JButton("pow");
		JButton jbu14=new JButton("1/x");
		JButton jbu21=new JButton("CE");
		JButton jbu22=new JButton("C");
		JButton jbu23=new JButton("<--");
		JButton jbu24=new JButton("/");
		JButton jbu31=new JButton("7");
		JButton jbu32=new JButton("8");
		JButton jbu33=new JButton("9");
		JButton jbu34=new JButton("*");
		JButton jbu41=new JButton("4");
		JButton jbu42=new JButton("5");
		JButton jbu43=new JButton("6");
		JButton jbu44=new JButton("-");
		JButton jbu51=new JButton("1");
		JButton jbu52=new JButton("2");
		JButton jbu53=new JButton("3");
		JButton jbu54=new JButton("+");
		JButton jbu61=new JButton("+/-");
		JButton jbu62=new JButton("0");
		JButton jbu63=new JButton(".");
		JButton jbu64=new JButton("=");
		
		
		jfr.setLayout(null);
		jte.setBounds(10, 10, 333, 80);
		jbu11.setBounds(10, 90, 83, 40);
		jbu12.setBounds(93, 90, 83, 40);
		jbu13.setBounds(176, 90, 83, 40);
		jbu14.setBounds(259, 90, 83, 40);
		jbu21.setBounds(10, 130, 83, 40);
		jbu22.setBounds(93, 130, 83, 40);
		jbu23.setBounds(176, 130, 83, 40);
		jbu24.setBounds(259, 130, 83, 40);
		jbu31.setBounds(10, 170, 83, 40);
		jbu32.setBounds(93, 170, 83, 40);
		jbu33.setBounds(176, 170, 83, 40);
		jbu34.setBounds(259, 170, 83, 40);
		jbu41.setBounds(10, 210, 83, 40);
		jbu42.setBounds(93, 210, 83, 40);
		jbu43.setBounds(176, 210, 83, 40);
		jbu44.setBounds(259, 210, 83, 40);
		jbu51.setBounds(10, 250, 83, 40);
		jbu52.setBounds(93, 250, 83, 40);
		jbu53.setBounds(176, 250, 83, 40);
		jbu54.setBounds(259, 250, 83, 40);
		jbu61.setBounds(10, 290, 83, 40);
		jbu62.setBounds(93, 290, 83, 40);
		jbu63.setBounds(176, 290, 83, 40);
		jbu64.setBounds(259, 290, 83, 40);
		
		
		
		
		
		
		jfr.add(jte);
		jfr.add(jbu11);
		jfr.add(jbu12);
		jfr.add(jbu13);
		jfr.add(jbu14);
		jfr.add(jbu21);
		jfr.add(jbu22);
		jfr.add(jbu23);
		jfr.add(jbu24);
		jfr.add(jbu31);
		jfr.add(jbu32);
		jfr.add(jbu33);
		jfr.add(jbu34);
		jfr.add(jbu41);
		jfr.add(jbu42);
		jfr.add(jbu43);
		jfr.add(jbu44);
		jfr.add(jbu51);
		jfr.add(jbu52);
		jfr.add(jbu53);
		jfr.add(jbu54);
		jfr.add(jbu61);
		jfr.add(jbu62);
		jfr.add(jbu63);
		jfr.add(jbu64);
		
		
		jfr.setSize(375, 370);
		jfr.setVisible(true);
	}

}

运行截图:

课程总结:

其他容器:

一、JPanel

用途:

应用:可以将多个组件加入到JPanel中实现复杂的排列。

如下图所示:

JPanel类的常用方法:

序号 方法 类型 描述
1 public JPanel() 构造 创建一个默认的JPanel对象,使用流布局管理
2 public JPanel(LayoutManager layout) 构造 创建一个指定布局管理器的JPanel对象

例子:

package diyishiba;
import java.awt.*;
import javax.swing.*;
public class JPanelDemo01 {

	public static void main(String[] args) {
		JFrame jfr=new JFrame("窗口");
		JPanel jpa=new JPanel();
		
		jpa.add(new JLabel("一"));
		jpa.add(new JLabel("棵"));
		jpa.add(new JLabel("树"));
		jpa.add(new JButton("JAVA"));
		jpa.add(new JButton("好"));
		jpa.add(new JButton("难"));
		
		jfr.add(jpa);
		
		jfr.setSize(400, 300);
		jfr.setVisible(true);
	}

}

运行截图:

二、JSplitPane

用途:

如下图所示:

JSplitPanel类的主要方法及常量

例子:

package diyishiba;
import java.awt.*;
import javax.swing.*;
public class JSplitPaneDemo01 {

	public static void main(String[] args) {
		JFrame jfr=new JFrame("窗口");
		JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JLabel("这是左窗口"),new JLabel("这是右窗口"));
		JSplitPane jsp1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jsp,new JLabel("这是下窗口"));
		
		jfr.add(jsp1);
		
		jsp.setDividerLocation(170);
		jsp1.setDividerLocation(130);
		jsp.setOneTouchExpandable(true);
		jsp1.setOneTouchExpandable(true);
		jsp.setDividerSize(3);
		
		
		jfr.setSize(400, 300);
		jfr.setVisible(true);
		
	}

}

运行截图:

三、JTabbedPane

如下图所示:


JTabbedPane类的常用方法及常量:

例子:

package diyishiba;
import java.awt.*;
import javax.swing.*;
public class JTabbedPaneDemo01 {

	public static void main(String[] args) {
		JFrame jfr=new JFrame("窗口");
		JPanel jpa1=new JPanel();
		JPanel jpa2=new JPanel();
		JTabbedPane jta=new JTabbedPane(JTabbedPane.TOP);
		
		
		jpa1.add(new JLabel("常规"));
		jpa2.add(new JLabel("高级"));
		
		
		jta.addTab("常规",jpa1);
		jta.addTab("高级", jpa2);
		jta.addTab("远程", null);
		
	
		Container con=jfr.getContentPane();
		con.add(jta);
		
		jfr.setSize(400, 300);
		jfr.setVisible(true);
		
	}

}

运行截图:

四、JScrollPane

定义:

组成:

JScrollPane类的常用方法及常量:

例子:

package diyishiba;
import java.awt.*;
import java.io.File;

import javax.swing.*;
public class JScrollPaneDemo01 {

		public static void main(String[] args) {
			JFrame jfr=new JFrame("窗口");
			String path="G:"+File.separator+"程序员搞笑.jpg";
			ImageIcon ic=new ImageIcon(path);
			JLabel jla=new JLabel(ic);
			JPanel jpa=new JPanel();
			jpa.add(jla);
			JScrollPane jsc=new JScrollPane(jpa,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
			
			jfr.add(jsc);
			jfr.setSize(400, 300);
			jfr.setVisible(true);
		}
    }

运行截图:

五、JDesktopPaneJIntenrnalFrame

用途:

规定:

JDesktopPane类的常用方法:

JInternalFrame类的常用方法:

例子:

package diyishiba;
import java.awt.*;
import javax.swing.*;
public class JDesktopPaneDemo01 {

	public static void main(String[] args) {
		JFrame jfr=new JFrame("多窗口");
		jfr.setLayout(new BorderLayout());
		JDesktopPane jde=new JDesktopPane();
		jfr.add(jde,BorderLayout.CENTER);
		for(int i=0;i<3;i++) {
			JInternalFrame jin=new JInternalFrame("内窗口",true,true,true,true);
			JPanel jpa=new JPanel();
			jpa.add(new JLabel("内窗口"+i));
			jin.add(jpa);
			jin.setLocation(35-i*10, 35-i*10);
			jin.pack();
			jin.setVisible(true);
			jde.add(jin);
		}
		jfr.setSize(300, 270);
		jfr.setVisible(true);
	}

}

运行截图:

六、事件处理

事件和监听器:


如下图所示:

Java事件处理流程

要先理解事件源与事件监听器的概念,如下所示:

处理事件的概念:

如下所示:

七、窗体事件

定义:

WindowListener接口的方法:

例子:

实现接口

package diyishiba;
import java.awt.event.*;
import java.awt.event.WindowListener;
public class WindowListenerDemo01 implements WindowListener{

	public void windowOpened(WindowEvent e) {
		System.out.println("窗口被打开");
		
	}

	
	public void windowClosing(WindowEvent e) {
		System.out.println("窗口正在被关闭");
		
	}

	@Override
	public void windowClosed(WindowEvent e) {
		System.out.println("窗口被关闭");
		
	}

	@Override
	public void windowIconified(WindowEvent e) {
		System.out.println("窗口最小化");
		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		System.out.println("窗口最大化");		
	}

	@Override
	public void windowActivated(WindowEvent e) {
		System.out.println("窗口被选中");
		
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		System.out.println("窗口没被选中");
		
	}
	
	
}

测试类:

package diyishiba;
import java.awt.Color;

import javax.swing.*;
public class Test {

	public static void main(String[] args) {
			JFrame jfr=new JFrame("窗口");
			WindowListenerDemo01 win=new WindowListenerDemo01();
			jfr.addWindowListener(win);
			JPanel jpa=new JPanel();
			jpa.setBackground(Color.GRAY);
			jfr.add(jpa);
			jfr.setSize(400, 300);
			jfr.setVisible(true);
	}

}

运行截图:



八、适配器类:

定义:

例子:

package diyishiba;
import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
public class Test1 {

	public static void main(String[] args) {
			JFrame jfr=new JFrame("窗口");
			jfr.addWindowListener(new WindowAdapter() {
				public void windowClosed(WindowEvent e) {
					System.out.println("窗口被关闭");
				}
				public void windowOpened(WindowEvent e) {
					System.out.println("窗口被打开");
				}
			});
			jfr.setSize(400, 300);
			JPanel jpa=new JPanel();
			jpa.setBackground(Color.BLUE);
			jfr.add(jpa);
			jfr.setVisible(true);
	}

}

运行截图:


问题:发现窗口关闭时并没有输出语句。前面那个例子也是这样,其他的语句都能输出就是窗口关闭时的语句不能输出,不知道是哪里出现问题了。还望助教指点下。

九、动作事件及监听处理

定义:



例子:

package diyishiba;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ActionListenerDemo01 {
		JFrame jfr=new JFrame("窗口");
		JButton jbu=new JButton("显示");
		JLabel jla=new JLabel();
		JTextField jte=new JTextField(10);
		JPanel jpa=new JPanel();
		public ActionListenerDemo01() {
			Font font=new Font("幼圆",Font.BOLD+Font.ITALIC,28);
			jla.setFont(font);
			jla.setText("等待用户输入信息");
			jbu.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if(e.getSource()==jbu) {
						jla.setText(jte.getText());
					}
					
				}
				
			});
		jfr.setLayout(new GridLayout(2,1));
		jpa.setLayout(new GridLayout(1,2));
		jpa.add(jte);
		jpa.add(jbu);
		jfr.add(jpa);
		jfr.add(jla);
		jfr.pack();
		jfr.setVisible(true);
		}
	public static void main(String[] args) {
		new ActionListenerDemo01();

	}

}

运行截图:



posted @ 2019-11-13 11:37  代码不是我的菜  Views(213)  Comments(32Edit  收藏  举报