###上机课实验:计算器 ####源代码:
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);
}
}
####运行截图: ####五、
JDesktopPane
与JIntenrnalFrame
####用途: ####规定:
####
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();
}
}
####运行截图: