1.创建一个具有关闭功能的空白窗口(如图5-1)。
(知识点:在Eclipse下创建窗体,事件处理)
import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; public class SY5_1_JFrame 【代码1】{//继承JFrame类 public static void main(String[] args) { new SY5_1_JFrame(); } //构造函数 public SY5_1_JFrame() { 【代码2】;// 创建标题为“JFrame窗口”窗口对象 【代码3】;// 设置窗口大小为400 x 200 【代码4】;// 设置窗口是可视的 //为窗口添加窗口事件适配用来关闭窗体,这里大家暂时照用就是 addWindowListener(new WindowAdapter() {器 public void windowClosing(WindowEvent e) {// 关闭窗口事件的方法 System.exit(0); } }); } } |
|
图5-1 JFrame窗口 |
图5-2 带组件的窗口 |

2.在窗体界面上添加相应组件,程序运行结果如图5-2。
(知识点:在NetBeans/Eclipse下创建窗体,基本组件的使用,事件处理)

3.编写窗体程序SY5_2_CalMoney,如图5-3所示,界面上设置三个文本框,第一个文本框给用户输入商品单价,第二个则是给用户输入商品数量,第三个用于显示总金额。
要求:①单价框和商品数量框中要求输入的只能数字;②当在单价框中按“回车”时商品数量框获得焦点,当在数量框中按“回车”时完成计算并在总金额框中显示总金额。
图5-3 计算金额窗口 |
5-4 输入错误时提示 |
(知识点:在NetBeans/Eclipse下创建窗体,基本组件的使用,键盘事件处理,对话框)

package Exp05_03_20170566134; import java.awt.Button; import java.awt.KeyboardFocusManager; import java.awt.event.*; import java.io.Console; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class SY5_2_CalMoney extends JFrame implements ActionListener,KeyListener{//继承JFrame类 private JLabel name; private JTextField nameField; private JLabel call; private JTextField nameField2; private JLabel money; private JTextField moneyField; public static void main(String[] args) { new SY5_2_CalMoney(); } //构造函数 public SY5_2_CalMoney() { super("JFrame");// 创建标题为“JFrame窗口”窗口对象 setSize(250,150);// 设置窗口大小为400 x 200 this.setLocationRelativeTo(null);//窗体居中显示 name = new JLabel("商品单价"); nameField = new JTextField("4.5"); call = new JLabel("购买数量"); nameField2 = new JTextField("20"); money =new JLabel("应付金额"); moneyField =new JTextField(); this.setVisible(true);// 设置窗口是可视的 //为窗口添加窗口事件适配用来关闭窗体,这里大家暂时照用就是 addWindowListener(new WindowAdapter() { //器 public void windowClosing(WindowEvent e) {// 关闭窗口事件的方法 System.exit(0); } }); setLayout(null); name.setBounds(30,10,80,20); nameField.setBounds(100,10,80,20); nameField.addActionListener(this);//数据绑定 以下两种方式均可 nameField.addKeyListener(this);//数据绑定 call.setBounds(30,45,80,20); nameField2.setBounds(100, 45, 80, 20); nameField2.addActionListener(this);//数据绑定 以下两种方式均可 nameField2.addKeyListener(this);//数据绑定 money.setBounds(30, 70, 80, 20); moneyField.setBounds(100, 75, 80, 20); moneyField.addActionListener(this); moneyField.setEditable(false); add(name); add(nameField); add(call); add(nameField2); add(money); add(moneyField); /* this.addKeyListener(new KeyAdapter()//这种方式也是的,但此时不使用 放在结构体里 { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { e.consume(); KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent(); } } }); */ } boolean isDouble(String str) { try { Double.parseDouble(str); return true; } catch(NumberFormatException ex){} return false; } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource()==nameField) { boolean isNum=nameField.getText().matches("[0-9]+"); isNum = isDouble(nameField.getText()); if (isNum) { } else { Object[] options = { "确定" }; JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); nameField.setText(""); } nameField2.requestFocus(); } if(e.getSource()==nameField2){ //moneyField.requestFocus(); Float mon = Float.parseFloat(nameField.getText())*Float.parseFloat(nameField2.getText()); moneyField.setText(String.valueOf(mon)); } } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub // if (e.getKeyCode()==KeyEvent.VK_ENTER) { // nameField2.requestFocus(); // } else if (e.getKeyCode()==KeyEvent.VK_ENTER) { // moneyField.requestFocus(); // }else { // // } } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } } /* 其他类型转String String s = String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float.parseFloat( s ); Double d = Double.parseDouble( s ); * */

package Exp05_03_20170566134; import java.applet.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class test extends Applet implements ActionListener { TextField userText, passText; Button loginButton; public void init() { userText = new TextField(10); passText = new TextField(10); loginButton = new Button("login"); add(userText); add(passText); add(loginButton); userText.addActionListener(this); passText.addActionListener(this); } public void actionPerformed(ActionEvent e) { if (e.getSource() == userText) passText.requestFocus(); else if (e.getSource() == passText) loginButton.requestFocus(); } }
4.编写菜单程序SY5_3_Menu,如图9-5所示,在窗口中添加菜单栏,在菜单栏添加菜单项,并添加下拉菜单和2 级菜单,通过选择菜单项可以执行不同操作,如“打开”可打开SY9_3_Menu类生成的窗口。(知识点:在NetBeans/Eclipse下创建窗体,菜单,事件处理)
图5-5 菜单应用窗口

package Exp05_04_20170566134; import java.awt.Button; import java.awt.event.*; import java.io.File; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.filechooser.FileSystemView; public class SY5_3_Menu extends JFrame implements ActionListener{//继承JFrame类 JMenu jm1,jm2,twojm1; JMenuBar jmb; JMenuItem jmt1,jmt2,jmt3; JMenuItem two01,two02,two03; private Button exitButton; public static void main(String[] args) { new SY5_3_Menu(); } //构造函数 public SY5_3_Menu() { super("菜单应用");// 创建标题为“JFrame窗口”窗口对象 setSize(400,200);// 设置窗口大小为400 x 200 this.setLocationRelativeTo(null);//窗体居中显示 jmb=new JMenuBar(); jm1=new JMenu("文件"); jm2=new JMenu("帮助"); jmb.add(jm1); jmb.add(jm2); jmt1=new JMenuItem("打开"); jmt2=new JMenuItem("关闭"); jmt3=new JMenuItem("退出"); twojm1=new JMenu("编辑"); two01=new JMenuItem("复制"); two02=new JMenuItem("剪切"); two03=new JMenuItem("粘贴"); twojm1.add(two01); twojm1.add(two02); twojm1.add(two03); jm1.add(jmt1); jm1.add(jmt2); jm1.add(twojm1); jm1.add(jmt3); this.add(jmb,"North"); exitButton =new Button("退出"); this.setVisible(true);// 设置窗口是可视的 //为窗口添加窗口事件适配用来关闭窗体,这里大家暂时照用就是 addWindowListener(new WindowAdapter() { //器 public void windowClosing(WindowEvent e) {// 关闭窗口事件的方法 System.exit(0); } }); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(null); jmt1.addActionListener(this); jmt2.addActionListener(this); jmt3.addActionListener(this); two01.addActionListener(this); two02.addActionListener(this); two03.addActionListener(this); add(jmb,"North"); exitButton.setBounds(160, 135, 50, 20); exitButton.addActionListener(this); add(exitButton); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource() == jmt1) { //打开 JFileChooser chooser = new JFileChooser(new File(System.getProperty("user.dir")+"/src/Exp05_04_20170566134")); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.showDialog(new JLabel(), "选择"); System.out.println(System.getProperty("user.dir")); //File file = chooser.getSelectedFile(); //textField.setText(file.getAbsoluteFile().toString());//importent }else if (e.getSource() == jmt2) { //关闭 }else if (e.getSource() == jmt3) { //退出 System.exit(0); }else if (e.getSource() == two01) { //复制 }else if (e.getSource() == two02) { //剪切 }else if (e.getSource() == two03) { //粘贴 }else if (e.getSource() == exitButton) { System.exit(0); } else { } } } /* * 参考路径选择文档 https://blog.csdn.net/u010142437/article/details/78262895 */
5.[SY5_4.java]编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中GeneratorTM类对象负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类对象负责为算术题目提供界面,程序运行结果如图5-6所示。(知识点:在NetBeans/Eclipse下创建窗体,基本组件,事件处理,类与类之间关系,MVC初步了解)
图5-6 算术测试小软件

package Exp05_05_20170566134; import java.awt.Button; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class ComputerFrame implements ActionListener{ JFrame suanshu = new JFrame("算数测试小软件"); String[] num={"30","50","100"}; JLabel nameLabel = new JLabel("选择算数范围"); JComboBox number = new JComboBox(); JButton button = new JButton("获取题目"); JTextField beijianshu = new JTextField(); JTextField jianshu = new JTextField(); JTextField daan = new JTextField(); JLabel jiahao = new JLabel("-"); JLabel dengyu = new JLabel("="); JButton queren = new JButton("确认答案"); JLabel jieguo = new JLabel(""); int Answerjieguo; public ComputerFrame() { suanshu.setSize(480, 200); suanshu.setLayout(null); suanshu.setLocationRelativeTo(null); for (int i = 0; i < num.length; i++) { number.addItem(Integer.parseInt(num[i]) ); } nameLabel.setBounds(15, 20, 80, 20); number.setBounds(110, 20, 50, 20); button.setBounds(180, 20, 100, 20); button.addActionListener(this); beijianshu.setBounds(20, 50, 80, 20); beijianshu.setEditable(false); jianshu.setBounds(150, 50, 80, 20); jianshu.setEditable(false); jiahao.setBounds(120, 50, 10, 20); dengyu.setBounds(240, 50, 20, 20); daan.setBounds(270, 50, 80, 20); queren.setBounds(350, 50, 90, 20); queren.addActionListener(this); jieguo.setBounds(240, 80, 100, 20); suanshu.add(nameLabel); suanshu.add(number); suanshu.add(button); suanshu.add(beijianshu); suanshu.add(jianshu); suanshu.add(jiahao); suanshu.add(dengyu); suanshu.add(daan); suanshu.add(queren); suanshu.add(jieguo); suanshu.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if ("获取题目".equals(e.getActionCommand())) { System.out.println(number.getSelectedItem()); GeneratorTM naTm = new GeneratorTM((int)number.getSelectedItem().hashCode()); beijianshu.setText(naTm.beijianshu+""); jianshu.setText(naTm.jianshu+""); Answerjieguo = naTm.getDaan(); } if("确认答案".equals(e.getActionCommand())) { System.out.println(daan.getText()); try { if (Answerjieguo ==Integer.parseInt(daan.getText())) { System.out.println("你回答正确"); jieguo.setText("你回答正确"); }else { System.out.println("你回答错误"); jieguo.setText("你回答错误"); daan.setText(""); } } catch (Exception e2) { System.out.println("你的输入格式有误!"); daan.setText(""); } } } }

package Exp05_05_20170566134; public class GeneratorTM { protected int beijianshu; protected int jianshu; protected int daan; public GeneratorTM(int max) { this.beijianshu = (int)(1+Math.random()*max); this.jianshu = (int)(1+Math.random()*max); this.daan = this.beijianshu-this.jianshu; } public int getDaan() { return daan; } }

package Exp05_05_20170566134; public class test { public static void main(String[] args) { // TODO Auto-generated method stub new ComputerFrame(); } }