//Teacher.java public class Teacher { int numberOne,numberTwo; String operator=""; boolean right; public int giveNumberOne(int n) { numberOne=(int)(Math.random()*n)+1; return numberOne; } public int giveNumberTwo(int n) { numberTwo=(int)(Math.random()*n)+1; return numberTwo; } public String giveOperator() { double d=Math.random(); if(d>=0.5) operator="+"; else operator="-"; return operator; } public boolean getRight(int answer) { if(operator.equals("+")) { if(answer==numberOne+numberTwo) right=true; else right=false; } else if(operator.equals("-")) { if(answer==numberOne-numberTwo) right=true; else right=false; } return right; } } //ComputerFrame.java import java.awt.*; import java.awt.event.*; public class ComputerFrame extends Frame implements ActionListener { TextField textOne,textTwo,textResult; Button getProblem,giveAnwser; Label operatorLabel,message; Teacher teacher; ComputerFrame(String s) { super(s); teacher=new Teacher(); setLayout(new FlowLayout()); textOne=【代码1】 //创建textOne,其可见字符长是10 textTwo=【代码2】 //创建textTwo,其可见字符长是10 textResult=【代码3】 //创建textResult,其可见字符长是10 operatorLabel=new Label("+"); message=new Label("你还没有回答呢"); getProblem=new Button("获取题目"); giveAnwser=new Button("确认答案"); add(getProblem); add(textOne); add(operatorLabel); add(textTwo); add(new Label("=")); add(textResult); add(giveAnwser); add(message); textResult.requestFocus(); textOne.setEditable(false); textTwo.setEditable(false); 【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器 【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器 【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器 setBounds(100,100,450,100); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(【代码7】) //判断事件源是否是getProblem { int number1=teacher.giveNumberOne(100); int number2=teacher.giveNumberTwo(100); String operator=teacher.givetOperator(); textOne.setText(""+number1); textTwo.setText(""+number2); operatorLabel.setText(operator); message.setText("请回答"); textResult.setText(null); } if(【代码8】) //判断事件源是否是giveAnwser { String answer=textResult.getText(); try{ int result=Integer.parseInt(answer); if(teacher.getRight(result)==true) { message.setText("你回答正确"); } else { message.setText("你回答错误"); } } catch(NumberFormatException ex) { message.setText("请输入数字字符"); } } textResult.requestFocus(); validate(); } } //MainClass.java public class MainClass { public static void main(String args[]) { ComputerFrame frame; frame=【代码9】//创建窗口,其标题为:算术测试 } }
//SignalCanvas.java import java.awt.*; public class SignalCanvas extends Canvas { int red,green,yellow,x,y,r; SignalCanvas() { setBackground(Color.white); } public void setRed(int r) { red=r; } public void setGreen(int g) { green=g; } public void setYellow(int y) { yellow=y; } public void setPosition(int x,int y) { this.x=x; this.y=y; } public void setRadius(int r) { this.r=r; } public void paint(Graphics g) { if(red==1) { g.setColor(Color.red); } else if(green==1) { g.setColor(Color.green); } else if(yellow==1) { g.setColor(Color.yellow); } g.fillOval(x,y,2*r,2*r); } } //SignalFrame.java import java.awt.*; import java.applet.*; import java.awt.event.*; public class SignalFrame extends Frame implements ItemListener { Choice choice; SignalCanvas signal=null; String itemRed="红灯",itemYellow="黄灯",itemGreen="绿灯"; public SignalFrame() { choice=【代码1】 //创建choice 【代码2】 //创建choice添加itemRed 【代码3】 //创建choice添加itemYellow 【代码4】 //创建choice添加itemGreen 【代码5】 //将当前窗口注册为choice的ItemEvent事件监视器 add(choice,BorderLayout.NORTH); try{ Class cs=Class.forName("SignalCanvas"); signal=(SignalCanvas)cs.newInstance(); add(signal,BorderLayout.CENTER); } catch(Exception e) { add(new Label("您还没有编写SignalCanvas类"),BorderLayout.CENTER); } setBounds(100,100,360,300); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void itemStateChanged(ItemEvent e) { String item= 【代码6】 // choice返回被选中的条目 int w=signal.getBounds().width; int h=signal.getBounds().height; int m=Math.min(w,h); signal.setRadius(m/6); if(item.equals(itemRed)) { if(signal!=null) { signal.setRed(1); signal.setYellow(0); signal.setGreen(0); signal.setPosition(w/3,0); signal.repaint(); } } else if(item.equals(itemYellow)) { if(signal!=null) { signal.setRed(0); signal.setYellow(1); signal.setGreen(0); signal.setPosition(w/3,h/3); signal.repaint(); } } else if(item.equals(itemGreen)) { if(signal!=null) { signal.setRed(0); signal.setYellow(0); signal.setGreen(1); signal.setPosition(w/3,2*h/3); signal.repaint(); } } } } //SignalMainClass.java public class SignalMainClass { public static void main(String args[]) { SignalFrame frame; frame=new SignalFrame() ; frame.setTitle("信号灯"); } } 3、字体对话框:请读懂下面模板代码,将其补充完整并调试运行。 //FontFamilyNames.java import java.awt.GraphicsEnvironment; public class FontFamilyNames { String fontName[]; public String [] getFontName() { GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); fontName=ge.getAvailableFontFamilyNames(); return fontName; } } //FontDialog.java import java.awt.event.*; import java.awt.*; import javax.swing.JLabel; public class FontDialog extends Dialog implements ItemListener,ActionListener { FontFamilyNames fontFamilyNames; int fontSize=38; String fontName; Choice fontNameList; JLabel label; Font font; Button yes,cancel; static int YES=1,NO=0; int state=-1; FontDialog(Frame f) { super(f); fontFamilyNames=new FontFamilyNames(); 【代码1】 //对话框设置为有模式 yes=new Button("Yes"); cancel=new Button("cancel"); yes.addActionListener(this); cancel.addActionListener(this); label=new JLabel("hello,奥运",JLabel.CENTER); fontNameList=new Choice(); String name[]=fontFamilyNames.getFontName(); for(int k=0;k<name.length;k++) { fontNameList.add(name[k]); } fontNameList.addItemListener(this); add(fontNameList,BorderLayout.NORTH); add(label,BorderLayout.CENTER); Panel pSouth=new Panel(); pSouth.add(yes); pSouth.add(cancel); add(pSouth,BorderLayout.SOUTH); setBounds(100,100,280,170); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { state=NO; setVisible(false); } } ); validate(); } public void itemStateChanged(ItemEvent e) { fontName=(String)fontNameList.getSelectedItem(); font=new Font(fontName,Font.BOLD,fontSize); label.setFont(font); label.repaint(); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==yes) { state=YES; 【代码2】 //对话框设置为不可见 } else if(e.getSource()==cancel) { state=NO; 【代码3】 //对话框设置为不可见 } } public int getState() { return state; } public Font getFont() { return font; } } // FrameHaveDialog.java import java.awt.event.*; import java.awt.*; import javax.swing.JTextArea; public class FrameHaveDialog extends Frame implements ActionListener { JTextArea text; Button buttonFont; FrameHaveDialog() { buttonFont=new Button("设置字体"); text=new JTextArea("Java 2实用教程(第三版)"); buttonFont.addActionListener(this); add(buttonFont,BorderLayout.NORTH); add(text); setBounds(60,60,300,300); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { if(e.getSource()==buttonFont) { FontDialog dialog=【代码4】 //创建对话框 【代码5】 //对话框设置为可见 【代码6】 //对话框设置设置标题为“字体对话框” if(dialog.getState()==FontDialog.YES) { text.setFont(dialog.getFont()); text.repaint(); } if(dialog.getState()==FontDialog.NO) { text.repaint(); } } } } //FontDialogMainClass.java public class FontDialogMainClass { public static void main(String args[]) { new FrameHaveDialog(); } } 4、英语单词拼写练习:请读懂下面模板代码,将其补充完整并调试运行。 //RondomString.java public class RondomString { String str=""; public String getRondomString(String s) { StringBuffer strBuffer=new StringBuffer(s); int m=strBuffer.length(); for(int k=0;k<m;k++) { int index=(int)(Math.random()*strBuffer.length()); char c=strBuffer.charAt(index); str=str+c; strBuffer=strBuffer.deleteCharAt(index); } return str; } } //LetterLabel.java import java.awt.*; import java.awt.event.*; public class LetterLabel extends Button implements FocusListener,MouseListener { LetterLabel() { 【代码1】 //将当前对象注册为自身的焦点视器 【代码2】 //将当前对象注册为自身的标监视器 setBackground(Color.cyan); setFont(new Font("",Font.BOLD,30)); } public static LetterLabel[] getLetterLabel(int n) { LetterLabel a[]=new LetterLabel[n]; for(int k=0;k<a.length;k++) { a[k]=new LetterLabel(); } return a; } public void focusGained(FocusEvent e) { setBackground(Color.red); } public void focusLost(FocusEvent e) { setBackground(Color.cyan); } public void mousePressed(MouseEvent e) { requestFocus(); } public void setText(char c) { setLabel(""+c); } public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e){} } //SpellingWordFrame.java import java.awt.*; import java.awt.event.*; import javax.swing.Box; public class SpellingWordFrame extends Frame implements KeyListener,ActionListener { TextField inputWord; Button button; LetterLabel label[]; Panel northP,centerP; Box wordBox; String hintMessage="用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词"; Label messaageLabel=new Label(hintMessage); String word=""; SpellingWordFrame() { inputWord=new TextField(12); button=new Button("确定"); button.addActionListener(this); inputWord.addActionListener(this); northP=new Panel(); northP.add(new Label("输入一个英文单词:")); northP.add(inputWord); northP.add(button); centerP=new Panel(); wordBox=Box.createHorizontalBox(); centerP.add(wordBox); add(northP,BorderLayout.NORTH); add(centerP,BorderLayout.CENTER); add(messaageLabel,BorderLayout.SOUTH); setBounds(100,100,350,180); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e) { word=inputWord.getText(); int n=word.length(); RondomString rondom=new RondomString(); String randomWord=rondom.getRondomString(word); wordBox.removeAll(); messaageLabel.setText(hintMessage); if(n>0) { label=LetterLabel.getLetterLabel(n); for(int k=0;k<label.length;k++) { 【代码3】 //将当前窗口注册为label[k]的键盘监视器 label[k].setText(""+randomWord.charAt(k)); wordBox.add(label[k]); } validate(); inputWord.setText(null); label[0].requestFocus(); } } public void keyPressed(KeyEvent e) { LetterLabel sourceLabel=(LetterLabel)e.getSource(); int index=-1; if(【代码4】) //判断按下的是否是←键) { for(int k=0;k<label.length;k++) { if(label[k]==sourceLabel) { index=k; break; } } if(index!=0) { String temp=label[index].getText(); label[index].setText(label[index-1].getText()); label[index-1].setText(temp); label[index-1].requestFocus(); } } else if(【代码5】) //判断按下的是否是→键 { for(int k=0;k<label.length;k++) { if(label[k]==sourceLabel) { index=k; break; } } if(index!=label.length-1) { String temp=label[index].getText(); label[index].setText(label[index+1].getText()); label[index+1].setText(temp); label[index+1].requestFocus(); } } validate(); } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e) { String success=""; for(int k=0;k<label.length;k++) { String str=label[k].getText(); success=success+str; } if(success.equals(word)) { messaageLabel.setText("恭喜你,你成功了"); for(int k=0;k<label.length;k++) { label[k].removeKeyListener(this); label[k].removeFocusListener(label[k]); label[k].setBackground(Color.green); } inputWord.requestFocus(); } } } //WordMainClass.java public class WordMainClass { public static void main(String args[]) { new SpellingWordFrame(); } } 5、计算器 编写一个布局如下图8.1所示的简单计算器程序,能够进行加、减、乘、除运算。 图8.1 计算器界面 根据注释将下面程序补充完整并运行、测试结果。 package myproject.excise8_1; import java.awt.*; import java.awt.event.*; import javax.swing.*; //计算器窗体类CaculatorFrame class CaculatorFrame extends JFrame implements ActionListener { private JPanel panel1,panel2;//用于容纳计算器的各个按钮 private JTextField result;//显示计算结果 private boolean isFirstDigital=true; //判断是否表达式的第一个数字 private double resultNum ; //存储计算的中间结果 private double x=0.0; private String operator = "="; //运算符初值 public CaculatorFrame () { this.setTitle("简单计算器"); this.init();//调用init()方法 this.setBounds(300, 500, 360, 230); this.setResizable(false);//不可调整大小 this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭计算器窗口 } public void init(){ (1) //将窗体按BorderLayout布局 result=new JTextField(20); JButton jbt=new JButton("清空"); (2) // 将result设置为不可编辑 panel1=new JPanel(); panel2=new JPanel(); (3) // 将panel1布局为4行4列的网格,网格之间的水平方向、垂直方向间隔均为5个像素 panel2.setLayout(new GridLayout(2,1,5,5)); String title[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; for(int i=0;i<title.length;i++){ JButton bt=new JButton(); bt.setText(title[i]); if ("0123456789.".indexOf(title[i])>=0) //若点击的是数字或小数点 bt.setForeground(Color.DARK_GRAY); else bt.setForeground(Color.RED); panel1.add(bt); bt.addActionListener(this);//添加事件监听器 } panel2.add(result); panel2.add(jbt); jbt.setForeground(Color.RED); jbt.addActionListener(this); this.add(panel2,BorderLayout.NORTH);//将panel2添加到窗体上 this.add(panel1,BorderLayout.CENTER);//将panel1添加到窗体上 } //事件处理代码 public void actionPerformed(ActionEvent e) { String s= (4) //获得所单击按钮上的值 result.setEnabled(true);//设置为可编辑 /**运算数处理部分*/ if ("0123456789.".indexOf(s)>=0) { if (isFirstDigital) // 输入第一个数字 result.setText(s); else if ((s.equals(".")) && (result.getText().indexOf(".") < 0)) // 输入的是小数点 result.setText(result.getText() + "."); else if (!s.equals(".")) //输入的不是小数点 result.setText(result.getText() +s); isFirstDigital = false; } /**"清空"按钮处理部分*/ else if(s.equals("清空")){ result.setText("0"); isFirstDigital = true; operator = "="; //将operator再次初始化为"=" } /**运算符处理部分*/ else { if (operator.equals("+")) resultNum +=getNumberFromResult(); //此处调用getNumberFromResult()方法表示获取第2个运算数 else if (operator.equals("-")) resultNum-=getNumberFromResult(); else if (operator.equals("*")) resultNum*=getNumberFromResult(); else if (operator.equals("/")) { resultNum/=getNumberFromResult(); } /**由于operator初值为"=",第一次执行该分支调用getNumberFromResult()方法 * 表示获取第1个运算数 赋值给resultNum * 当单击"="按钮时表示获取最终计算结果*/ else if (operator.equals("=")){ resultNum =getNumberFromResult(); } result.setText(String.valueOf(resultNum)); operator = s; isFirstDigital = true; } } //end of actionPerformed /**获取运算数的方法*/ private double getNumberFromResult() { double operand = 0.0; try { operand= (5) //将从result中获取的文本转化为double类型 } catch (NumberFormatException e) {} return operand ; } }// end of CaculatorFrame //主类Calculator package myproject.excise8_1; public class Calculator { public static void main(String[] args) { new CaculatorFrame(); } } 6、请补充编写下面模板程序的事件处理部分程序,实现下图所示的“求解介于两个正整数m和n之间素数”。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; class PrimeFrame extends JFrame implements ActionListener{ JPanel p1,p2; JScrollPane js; JTextField t1,t2,t3; JButton bt; JTextArea area; int m,n,p,i,j; boolean isPrime; public PrimeFrame(){ p1=new JPanel(); p2=new JPanel();//创建面板对象 t1=new JTextField(10); t2=new JTextField(10); t3=new JTextField(10);//创建文本框对象 area=new JTextArea(10,40);//创建多行文本编辑区对象 js=new JScrollPane(area);//创建滚动面板对象,使文本区带上滚动条 bt=new JButton("输出素数");//创建按钮对象 bt.addActionListener(this);//给按钮注册事件监听器 p1.add(new JLabel("请输入m:"));//面板p1上添加标签 p1.add(t1);//将文本框t1添加到p1 p1.add(new JLabel("请输入n:")); p1.add(t2); p1.add(new JLabel("请输入每行显示素数的个数p:")); p1.add(t3); p1.add(bt); p2.add(new JLabel("求解得到的素数如下:")); p2.add(js); Container con=this.getContentPane(); con.add(p1,BorderLayout.NORTH); con.add(p2,BorderLayout.CENTER);//在窗体上添加p1,p2 } } public class PrimeNumber{ public static void main(String args[]) { PrimeFrame prime= new PrimeFrame();//创建窗体对象 prime.setBounds(0,0,800,300); prime.setVisible(true); prime.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
java:6、请补充编写下面模板程序的事件处理部分程序,实现下图所示的“求解介于两个正整数m和n之间素数”。算术测试GUI程序:请读懂下面模板程序,将其补充完整并调试运行。信号灯模拟GUI程序:请读懂
于 2023-11-19 19:00:48 首次发布