java实验 JAVA Swing 图形用户界面和对话框
- 格式:doc
- 大小:1.10 MB
- 文档页数:15
实验四图形用户界面编程实验报告一、实验目的1. 掌握常用组件的定义及使用2. 理解常见的布局方式及其特点3. 掌握事件处理机制二、实验原理1. 常用控件:① JTextField:用于接受文本输入,表现为图形界面中文本框。
② JLabel:标签控件,表现为图形界面中的文字控件。
③ JSplitPane:一个用于把面板分成两个大小可以调整的面板的控件。
④JScrollPane:一个提供滚动支持的面板,当内容超出面板大小时,会自动下按时滚动条。
⑤ JPanel:普通的面板。
可以通过布局管理器来控制面板中控件的布局。
⑥ JButton:按钮控件。
⑦ JPasswordField:用于接受密码的输入,表现为图形界面的密码输入框。
⑧ JList:列表框控件。
2. 每次单击按钮控件时,可以通过addActionListener方法对按钮注册监听,从而实现单击事件的监听。
三、实验内容通过编写一个程序实现上面的界面四、实验过程1. 界面的分析,实验要求中的界面主要分成上下的两部分,界面的下面部分用于显示在上面文本框输入的用户名和密码,而上部分又分成了输入姓名和密码的区域。
而且根据实验的要求,需要把输入的用户名和密码添加到列表框之中,这需要一个按钮。
根据分析,可以得到整个界面控件的关系如下:2. 代码的编写:首先,如果要创建一个窗口,则需要编写一个JFrame的子类。
public class MainFrame extends JFrame {}然后,在类之中声明需要用的控件(需要用的控件在上述已经全部列出)private JSplitPane mainSplitPane = null;private JSplitPane inputSplitPane = null;private JSplitPane topSplitPane = null;private JScrollPane listBoxPane = null;private JPanel buttonPanel = null;private JPanel usernamePanel = null;private JPanel passwordPanel = null;private JButton okButton = null;private JTextField username = null;private JPasswordField password = null;private JList listBox = null;private JLabel usernameLabel = null;private JLabel passwordLabel = null;再然后,编写类的构造方法,对控件进行初始化以及进行相应的布局,同时对JFrame 的一些属性进行调整。
一、实验目的通过本次实验,掌握Java Swing框架中常用的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout等,并学会如何使用这些布局管理器对窗口进行合理布局,提高GUI应用程序的界面设计能力。
二、实验环境1. 开发工具:Eclipse2. 开发语言:Java3. 环境配置:Java Development Kit(JDK)版本为1.8三、实验内容1. 流式布局(FlowLayout)2. 边界布局(BorderLayout)3. 网格布局(GridLayout)4. 网格袋布局(GridBagLayout)四、实验步骤1. 流式布局(FlowLayout)(1)创建一个窗口,并设置窗口标题为“FlowLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为FlowLayout。
(4)运行程序,观察窗口布局效果。
2. 边界布局(BorderLayout)(1)创建一个窗口,并设置窗口标题为“BorderLayout”。
(2)在窗口中添加四个标签,分别为“North”、“South”、“East”和“West”。
(3)设置窗口的布局管理器为BorderLayout。
(4)运行程序,观察窗口布局效果。
3. 网格布局(GridLayout)(1)创建一个窗口,并设置窗口标题为“GridLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为GridLayout,并设置每行和每列的组件数量为2。
(4)运行程序,观察窗口布局效果。
4. 网格袋布局(GridBagLayout)(1)创建一个窗口,并设置窗口标题为“GridBagLayout”。
java图形用户界面实验报告
《Java图形用户界面实验报告》
一、实验目的
本次实验旨在通过使用Java图形用户界面(GUI)工具,掌握Java程序设计的
基本原理和方法,加深对Java语言的理解和应用。
二、实验内容
1. 使用Java的Swing和AWT等图形用户界面工具,设计一个简单的窗口界面。
2. 在窗口中添加按钮、文本框、标签等组件,并实现相应的事件处理。
3. 编写Java代码,实现窗口界面的布局和交互功能。
三、实验步骤
1. 首先,创建一个新的Java项目,并新建一个窗口类。
2. 在窗口类中使用Swing和AWT工具,设计窗口界面,并添加所需的组件。
3. 编写事件处理方法,实现按钮点击、文本框输入等操作的响应。
4. 调试和运行程序,检查窗口界面的布局和功能是否符合预期。
四、实验结果
经过一系列的编码和调试,最终实现了一个简单的Java图形用户界面程序。
该
程序具有良好的界面布局和交互功能,用户可以通过按钮点击和文本框输入进
行相应的操作。
五、实验总结
通过本次实验,我深入理解了Java图形用户界面的设计原理和实现方法,掌握
了Swing和AWT等GUI工具的使用技巧。
在今后的学习和工作中,我将继续
加强对Java编程的实践,不断提升自己的技能水平,为今后的软件开发工作打
下坚实的基础。
实验三图形⽤户界⾯设计(汽院含答案解析)实验三图形⽤户界⾯设计实验⽬的1.掌握Java语⾔中GUI编程的基本⽅法2.掌握Java语⾔中AWT组件的基本⽤法3.掌握Java语⾔中Swing组件的基本⽤法实验导读1.通过图形⽤户界⾯(GUI:Graphics User Interface),⽤户和程序之间可以⽅便地进⾏交互。
AWT(Abstract Windowing Toolkit),中⽂译为抽象窗⼝⼯具包,是Java提供的⽤来建⽴和设置Java的图形⽤户界⾯的基本⼯具。
AWT由Java中的java.awt包提供,⾥⾯包含了许多可⽤来建⽴与平台⽆关的图形⽤户界⾯(GUI)的类,这些类⼜被称为组件(components)。
Swing是⼀个⽤于开发Java应⽤程序⽤户界⾯的开发⼯具包。
它以抽象窗⼝⼯具包(AWT)为基础使跨平台应⽤程序可以使⽤任何可插拔的外观风格。
Swing开发⼈员只⽤很少的代码就可以利⽤Swing丰富、灵活的功能和模块化组件来创建优雅的⽤户界⾯。
JDK写程序所有功能都是靠虚拟机去操作本地操作系统。
⽐如window下,就是JDK ⽤windows API实现功能。
⽽awt包中很多组件是组件⾃⾝去调⽤本地操作系统代码swing包中的组件采⽤的是调⽤本地虚拟机⽅法,由虚拟机再调⽤本地操作系统代码。
意思就是中间多了⼀层,这样就加强了swing包的移植性,与本地关系不那强了。
图3.1 AWT常⽤组件继承关系图Container为容器,是⼀个特殊的组件,该组件中可以通过add⽅法添加其他组件进来。
2.布局,容器中的组件的排放⽅式。
常见的布局管理器:FlowLayout(流式布局管理器):从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器):东,南,西,北,中。
Frame默认的布局管理器。
GridLayout(⽹格布局管理器):规则的矩阵CardLayout(卡⽚布局管理器):选项卡GridBagLayout(⽹格包布局管理器):⾮规则的矩阵3.类JFrame是java.awt.Frame 的扩展版本,该版本添加了对JFC/Swing 组件架构的⽀持,常⽤⽅法如下:1)JFrame() 该构造⽅法可以创建⼀个⽆标题的窗⼝,窗⼝的默认布局为BorderLayout布局。
实验八图形用户界面与对话框1.实验目的1、学会处理ActionEvent事件2、学会使用布局类3、学习焦点、鼠标和键盘事件4、学习使用输入和消息对话框2.实验内容1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1) 实验1算术测试2) 实验2布局与日历3) 实验3华容道4) 实验4字体对话框5) 实验5计算平方根6) 实验6简易计算器2、设计编写程序完成以下任务。
1)修改实验1的代码,再增加“小学生”级别,并增加测试乘、除法的功能。
2)编写一个应用程序,用户可以在一个文本框里输入数字字符,按Enter 键后将数字放入一个文本区。
当输入的数字大于1000时,弹出一个有模式的对话框,提示用户数字已经大于1000,是否继续将该数字放入文本区。
3)编写应用程序,有一个标题为“移动”的窗口,窗口布局为null,在窗口中有两个按钮,单击一个按钮让另一个按钮移动。
4)仿照操作系统中的简易计算机,自行设计一个能进行加减乘除运算的计算器。
需要考虑先进性乘除运算再进行加减运算。
3.实验步骤略4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。
(压缩包的文件名为:学号后三位和名字开头字母,如109zhh.RAR|ZIP)附录:实验1 算术测试模板代码Teacher.javaimport java.util.Random;import java.awt.event.*;import javax.swing.*;public class Teacher implements ActionListener{int numberOne,numberTwo;String operator=" ";boolean isRight;Random random;int maxInteger;JTextField textOne,textTwo,textResult;JLabel operatorLabel,message;Teacher(){random=new Random();}public void setMaxInteger(int n){maxInteger=n;}public void actionPerformed(ActionEvent e){String str=e.getActionCommand();if(str.equals("getProblem")){numberOne=random.nextInt(maxInteger)+1;numberTwo=random.nextInt(maxInteger)+1;double d=Math.random();if(d>=0.5){operator="+";}else{operator="-";}textOne.setText(""+numberOne);textTwo.setText(""+numberTwo);operatorLabel.setText(operator);message.setText("请回答");textResult.setText(null);}else if(str.equals("answer")){String answer=textResult.getText();try{int result=Integer.parseInt(answer);if(operator.equals("+")){if(result==numberOne+numberTwo){message.setText("你回答正确");}else{message.setText("你回答错误");}}else if(operator.equals("-")){if(result==numberOne-numberTwo){message.setText("你回答正确");}else{message.setText("你回答错误");}}}catch(NumberFormatException ex){message.setText("请输入数字字符");}}}public void setJTextField(JTextField...t){textOne =t[0];textTwo =t[1];textResult =t[2];}public void setJLabel(bel){operatorLabel=label[0];message=label[1];}}ComputerFrame.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class ComputerFrame extends JFrame{JMenuBar menubar;JMenu choiceGrade;JMenuItem grade1,grade2;JTextField textOne,textTwo,textResult;JButton getProblem,giveAnswer;JLabel operatorLabel,message;Teacher teacherZhang;ComputerFrame(){teacherZhang=new Teacher();teacherZhang.setMaxInteger(20);setLayout(new FlowLayout());menubar=new JMenuBar();choiceGrade=new JMenu("选择级别");grade1=new JMenuItem("幼儿级别");grade2=new JMenuItem("儿童级别");grade1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){teacherZhang.setMaxInteger(10);}});grade2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){teacherZhang.setMaxInteger(50);}});choiceGrade.add(grade1);choiceGrade.add(grade2);menubar.add(choiceGrade);setJMenuBar(menubar);//【代码1】//创建textOne,其可见字符长是5textTwo=new JTextField(5);textResult=new JTextField(5);operatorLabel=new JLabel("+");operatorLabel.setFont(new Font("Arial",Font.BOLD,20));message=new JLabel("你还没有回答呢");getProblem=new JButton("获取题目");giveAnswer=new JButton("确认答案");add(getProblem);add(textOne);add(operatorLabel);add(textTwo);add(new Label("="));add(textResult);add(giveAnswer);add(message);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);getProblem.setActionCommand("getProblem");textResult.setActionCommand("answer");giveAnswer.setActionCommand("answer");teacherZhang.setJTextField(textOne,textTwo,textResult);teacherZhang.setJLabel(operatorLabel,message);//【代码2】//将teacherZhang注册为getProblem的ActionEvent事件监视器//【代码3】//将teacherZhang注册为giveAnswer的ActionEvent事件监视器//【代码4】//将teacherZhang注册为textResult的ActionEvent事件监视器setVisible(true);validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);}}MainClass.javapublic class MainClass {public static void main(String[] args) {ComputerFrame frame;frame=new ComputerFrame();frame.setTitle("算术测试");frame.setBounds(100,100,650,180);}}实验2 布局与日历模板代码CalendarBean.javaimport java.util.Calendar;public class CalendarBean {String [] day;int year=2008,month=0;public int getYear() {return year;}public void setYear(int year) {this.year = year;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public String [] getCalendar() {String [] a=new String[42];Calendar 日历=Calendar.getInstance();日历.set(year,month-1,1);int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;int day=0;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) day=31;if(month==4||month==6||month==9||month==11)day=30;if(month==2) {if(((year%4==0)&&(year%100!=0))||(year%400==0))day=29;elseday=28;}for(int i=星期几,n=1;i<星期几+day;i++) {a[i]=String.valueOf(n) ;n++;}return a;}}CalendarFrame.javaimport java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.util.*;public class CalendarFrame extends JFrame implements ActionListener {JLabel labelDay[]=new JLabel[42];JButton titleName[]=new JButton[7];String name[]={"日","一","二","三","四","五","六"};JButton nextMonth,previousMonth;CalendarBean calendar;JLabel showMessage=new JLabel("",JLabel.CENTER);int year=2011,month=2;public CalendarFrame(){JPanel pCenter=new JPanel();//【代码1】//将pCenter的布局设置为7行7列的GridLayout布局.for(int i=0;i<7;i++){titleName[i]=new JButton(name[i]);titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));//【代码2】//pCenter中添加组件titleName[i]}for(int i=0;i<42;i++){labelDay[i]=new JLabel("",JLabel.CENTER);labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED));//【代码3】//pCenter中添加组件labelDay[i]}calendar=new CalendarBean();nextMonth=new JButton("下月");previousMonth=new JButton("上月");nextMonth.addActionListener(this);previousMonth.addActionListener(this);JPanel pNoth=new JPanel(),pSouth=new JPanel();pNoth.add(previousMonth);pNoth.add(nextMonth);pSouth.add(showMessage);//【代码4】//将窗口pCenter添加到中央区域//【代码5】//将窗口pNoth添加到北面区域//【代码6】//将窗口pSouth添加到南面区域setYearAndMonth(year,month);setDefaultCloseOperation(DISPOSE_ON_CLOSE);}public void setYearAndMonth(int y,int m){calendar.setYear(y);calendar.setMonth(m);String day[]= calendar.getCalendar();for(int i=0;i<42;i++){labelDay[i].setText(day[i]);}showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.month+"月"); }public void actionPerformed(ActionEvent e) {if(e.getSource()==nextMonth){month=month+1;if(month>12){month=1;}calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){labelDay[i].setText(day[i]);}}else if(e.getSource()==previousMonth){month=month-1;if(month<1){month=12;}calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){labelDay[i].setText(day[i]);}}showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.month+"月");}}CalendarMainClass.javapublic class CalendarMainClass {public static void main(String[] args) {CalendarFrame frame=new CalendarFrame();frame.setBounds(100,100,360,300);frame.setVisible(true);frame.setYearAndMonth(2013,5);}}实验3 华容道模板代码MainClassHRR.javapublic class MainClassHRR {public static void main(String[] args) {{ Hua_Rong_Road HRR=new Hua_Rong_Road();}}}Person.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;public class Person extends JButton implements FocusListener {int number;Color c=new Color(255,245,170);Font font=new Font("宋体",Font.BOLD,12);Person(int number,String s){ super(s);setBackground(c);setFont(font);this.number=number;c=getBackground();addFocusListener(this);}public void focusGained(FocusEvent e){ setBackground(Color.red);}public void focusLost(FocusEvent e){ setBackground(c);}}Hua_Rong_Road.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener, ActionListener {Person person[]=new Person[10];JButton left,right,above,below;JButton restart=new JButton("重新开始");public Hua_Rong_Road(){ init();setBounds(100,100,320,360);setVisible(true);setDefaultCloseOperation(DISPOSE_ON_CLOSE);validate();}public void init(){ setLayout(null);add(restart);restart.setBounds(100,320,120,25);restart.addActionListener(this);String name[]={"曹操","关羽","张","刘","周","黄","兵","兵","兵","兵"};for(int k=0;k<name.length;k++){ person[k]=new Person(k,name[k]);person[k].addMouseListener(this);person[k].addKeyListener(this);add(person[k]);}person[0].setBounds(104,54,100,100);person[1].setBounds(104,154,100,50);person[2].setBounds(54, 154,50,100);person[3].setBounds(204,154,50,100);person[4].setBounds(54, 54, 50,100);person[5].setBounds(204, 54, 50,100);person[6].setBounds(54,254,50,50);person[7].setBounds(204,254,50,50);person[8].setBounds(104,204,50,50);person[9].setBounds(154,204,50,50);person[9].requestFocus();left=new JButton(); right=new JButton();above=new JButton(); below=new JButton();add(left); add(right);add(above); add(below);left.setBounds(49,49,5,260);right.setBounds(254,49,5,260);above.setBounds(49,49,210,5);below.setBounds(49,304,210,5);validate();}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}public void keyPressed(KeyEvent e){ Person man=(Person)e.getSource();if(e.getKeyCode()==KeyEvent.VK_DOWN){ go(man,below);}if(e.getKeyCode()==KeyEvent.VK_UP){ go(man,above);}if(e.getKeyCode()==KeyEvent.VK_LEFT){ go(man,left);}if(e.getKeyCode()==KeyEvent.VK_RIGHT){ go(man,right);}}public void mousePressed(MouseEvent e){ Person man=(Person)e.getSource();int x=-1,y=-1;x=e.getX();y=e.getY();int w=man.getBounds().width;int h=man.getBounds().height;if(y>h/2){ go(man,below);}if(y<h/2){ go(man,above);}if(x<w/2){ go(man,left);}if(x>w/2){ go(man,right);}}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void go(Person man,JButton direction){ boolean move=true;Rectangle manRect=man.getBounds();int x=man.getBounds().x;int y=man.getBounds().y;if(direction==below)y=y+50;else if(direction==above)y=y-50;else if(direction==left)x=x-50;else if(direction==right)x=x+50;manRect.setLocation(x,y);Rectangle directionRect=direction.getBounds();for(int k=0;k<10;k++){ Rectangle personRect=person[k].getBounds();if((manRect.intersects(personRect))&&(man.number!=k)){ move=false;}}if(manRect.intersects(directionRect)){ move=false;}if(move==true){ man.setLocation(x,y);}}public void actionPerformed(ActionEvent e){ dispose();new Hua_Rong_Road();}}实验4 字体对话框模板代码FontFamilyNames.javaimport java.awt.GraphicsEnvironment;public class FontFamilyNames{ String allFontName[];public String [] getFontName(){ GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();allFontName=ge.getAvailableFontFamilyNames();return allFontName;}}FontDialog.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;public class FontDialog extends JDialog implements ItemListener,ActionListener{ FontFamilyNames fontFamilyNames;int fontSize=38;String fontName;JComboBox fontSizeList,fontNameList;JLabel label;Font font;JButton yes,cancel;static int YES=1,NO=0;int state=-1;FontDialog(Frame f){super(f);setTitle("字体");font=new Font("宋体",Font.PLAIN,12);fontFamilyNames=new FontFamilyNames();//【代码1】//当前对话框调用setModal(boolean b)设置为有模式yes=new JButton("Yes");cancel=new JButton("cancel");yes.addActionListener(this);cancel.addActionListener(this);label=new JLabel("hello,奥运",JLabel.CENTER);fontSizeList=new JComboBox();fontNameList=new JComboBox();String name[]=fontFamilyNames.getFontName();fontNameList.addItem("字体");for(int k=0;k<name.length;k++){ fontNameList.addItem(name[k]);}fontSizeList.addItem("大小");for(int k=8;k<72;k=k+2){ fontSizeList.addItem(new Integer(k));}fontNameList.addItemListener(this);fontSizeList.addItemListener(this);JPanel pNorth=new JPanel();pNorth.add(fontNameList);pNorth.add(fontSizeList);add(pNorth,BorderLayout.NORTH);add(label,BorderLayout.CENTER);JPanel pSouth=new JPanel();pSouth.add(yes);pSouth.add(cancel);add(pSouth,BorderLayout.SOUTH);setBounds(100,100,280,170);setDefaultCloseOperation(DISPOSE_ON_CLOSE);validate();}public void itemStateChanged(ItemEvent e){if(e.getSource()==fontNameList){fontName=(String)fontNameList.getSelectedItem();font=new Font(fontName,Font.PLAIN,fontSize); }else if(e.getSource()==fontSizeList){Integer m=(Integer)fontSizeList.getSelectedItem();fontSize=m.intValue();font=new Font(fontName,Font.PLAIN,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.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;public class FrameHaveDialog extends JFrame implements ActionListener{ JTextArea text;JButton buttonFont;FrameHaveDialog(){ buttonFont=new JButton("设置字体");text=new JTextArea("Java面向对象程序设计");buttonFont.addActionListener(this);add(buttonFont,BorderLayout.NORTH);add(text);setBounds(60,60,300,300);setVisible(true);validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);}public void actionPerformed(ActionEvent e){ if(e.getSource()==buttonFont){ FontDialog dialog=new FontDialog(this);//【代码4】//创建对话框dialog.setVisible(true);//【代码5】//对话框设置为可见//【代码6】//对话框设置设置标题为“字体对话框”if(dialog.getState()==FontDialog.YES){ text.setFont(dialog.getFont());text.repaint();}if(dialog.getState()==FontDialog.NO){ text.repaint();}}}}FontDialogMainClass.javapublic class FontDialogMainClass{ public static void main(String args[]){ FrameHaveDialog win=new FrameHaveDialog();}}实验5 计算平方根模板代码InputNumber.javaimport javax.swing.*;public class InputNumber {public static void main(String[] args) {double result=0;boolean inputComplete=false;while(inputComplete==false){String str=//【代码1】//弹出输入对话框try{result=Double.parseDouble(str);if(result>=0){inputComplete=true;}}catch(NumberFormatException exp){//【代码2】//弹出消息对话框inputComplete=false;}}double sqrtRoot=Math.sqrt(result);System.out.println(result+"平方根:"+sqrtRoot);}}实验6 简易计算器模板代码UserFrm.javaimport java.awt.*;import java.awt.event.*;public class UserFrm extends Frame implements ActionListener {private MenuBar jmb = new MenuBar();private MenuItem item = new MenuItem("退出");public static Font font = new Font("宋体", 1, 16);public UserFrm(String title) throws HeadlessException {super(title);//【代码1】//设置该Frame位置与大小,具体值为(100, 100, 250, 200)setVisible(true);Menu menu = new Menu("文件");menu.add(item);item.setFont(font);Panel panelNorth = new Panel();//【代码2】//把panelNorth加入窗体的北区add(new Caculator(), BorderLayout.CENTER);item.addActionListener(this);jmb.add(menu);jmb.setFont(font);setMenuBar(jmb);//【代码3】//用匿名类的方式设计完成窗体关闭的监听和实现关闭的方法validate();}public void actionPerformed(ActionEvent e) {Object o = e.getSource();if (o == item)System.exit(1);}public static void main(String[] args) {new UserFrm("用户界面");}}class Caculator extends Panel implements ActionListener, KeyListener {private TextField tf = new TextField("");private float x = 0;private float y = 0;private int code = 0;private boolean enable;private boolean first;private String str = "";public Caculator() {setLayout(new BorderLayout());enable = true;first = true;add(tf, BorderLayout.NORTH);Panel panel = new Panel();//【代码4】//把panel设置为GridLayout布局Button btn = null;//【代码5】//创建btn并把标题设为1;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码6】//创建btn并把标题设为2;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码7】//创建btn并把标题设为3;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码8】//创建btn并把标题设为+;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码9】//创建btn并把标题设为4;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码10】//创建btn并把标题设为5;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码11】//创建btn并把标题设为6;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码12】//创建btn并把标题设为-;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码13】//创建btn并把标题设为7;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码14】//创建btn并把标题设为8;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听///【代码15】//创建btn并把标题设为9;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码16】//创建btn并把标题设为*;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码17】//创建btn并把标题设为0;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码18】//创建btn并把标题设为.;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听//【代码19】//创建btn并把标题设为/;把btn加入panel中;设置该按钮的字体格式为UserFrm.font;设置输入确认监听;设置键盘输入监听btn = new Button("/");panel.add(btn);btn.setFont(UserFrm.font);btn.addActionListener(this);btn.addKeyListener(this);//【代码20】//把panel加入Caculator的中部区域中}public void actionPerformed(ActionEvent e) {if (e.getActionCommand() == "+") {//【代码21】//把文本框里的数字转成浮点型,赋给xcode = 0;this.tf.setText("");}if (e.getActionCommand() == "-") {//【代码21】//把文本框里的数字转成浮点型,赋给xcode = 1;this.tf.setText("");}if (e.getActionCommand() == "*") {//【代码21】//把文本框里的数字转成浮点型,赋给xcode = 2;this.tf.setText("");}if (e.getActionCommand() == "/") {x = Float.parseFloat(tf.getText());code = 3;this.tf.setText("");}if (e.getActionCommand() != "+" && e.getActionCommand() != "-"&& e.getActionCommand() != "*" && e.getActionCommand() != "/"&& e.getActionCommand() != "=") {if (enable) {if (first) {tf.setText(e.getActionCommand());first = false;} else {tf.setText(tf.getText() + e.getActionCommand());}}else {tf.setText(e.getActionCommand());enable = true;}}if (e.getActionCommand() == "=") {switch (code) {case 0://【代码22】//完成两个数的加法运算tf.setText(Float.toString(y));enable = false;break;case 1://【代码23】//完成两个数的减法运算tf.setText(Float.toString(y));enable = false;break;case 2://【代码24】//完成两个数的乘法运算tf.setText(Float.toString(y));enable = false;break;case 3://【代码25】//完成两个数的除法运算tf.setText(Float.toString(y));enable = false;break;}}}public void keyPressed(KeyEvent e) {if (e.getKeyChar() == '+') {x = Float.parseFloat(tf.getText());code = 0;this.tf.setText("");}if (e.getKeyChar() == '-') {x = Float.parseFloat(tf.getText());code = 1;this.tf.setText("");}if (e.getKeyChar() == '*') {x = Float.parseFloat(tf.getText());code = 2;this.tf.setText("");}if (e.getKeyChar() == '/') {x = Float.parseFloat(tf.getText());code = 3;this.tf.setText("");}if (【代码26】) {//判断用键盘输入的数字是否为0-9以及.号,其中的一个。
§5 Java 图形用户界面设计§5.1实验目的、内容及性质掌握 Java 的 GUI 设计技术,掌握 AWT 和 Swing 的应用技巧。
实验性质:验证、必做实验学时:2学时§5.2问题及思考1、最常见的AWT以及Swing控件用法。
2、几个常见布局总结3、区分容器控件和一般非容器控件4、Java事件几种关键组成部分以及事件处理流程§5.3实验指导1、Swing示例/*需要哪些组件,如何布局?*/import java.awt.*;import java.awt.event.*;import javax.swing.*;public class MyFrm extends JFrame{//从JFrame继承/*声明界面需要使用的控件*/JLabel lbl_name =new JLabel("用户名");JLabel lbl_pwd =new JLabel("密码");JTextField txt_name=new JTextField();JPasswordField txt_pwd=new JPasswordField();JButton btn_OK=new JButton("登陆");JButton btn_Cancel=new JButton("取消");/*在构造函数中将控件放置在JFrame上*/public MyFrm(){/*获取当前Frame的内容面板*/JPanel jp=(JPanel)this.getContentPane();/*设置内容面板的布局 Layout*/jp.setLayout(new GridLayout(3,2));jp.add(lbl_name);jp.add(txt_name);jp.add(lbl_pwd);jp.add(txt_pwd);jp.add(btn_OK);jp.add(btn_Cancel);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String arg[]){/*纯Java样式显示窗体*/JFrame.setDefaultLookAndFeelDecorated(true);/*实例化当前窗体类*/MyFrm frm=new MyFrm();frm.setSize(200,200);frm.setVisible(true);}}2、常用布局1)、流布局:FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化.容器.setLayout(new FlowLayout(FlowLayout.LEFT));2)、网格布局:GridLayout 按照指定行数与列数,将容器分成大小相等的单元格每个单元格放置一个控件. 不能将控件放在指定单元格容器.setLayout(new GridLayout(3,4,10,15));3)、边界布局:BorderLayout 将容器分成东、西、南、北、中五个部分容器.setLayout(new BorderLayout());窗口的内容面板默认布局就是边界布局。
本科生实验报告(三)学院: 信息工程学院专业: 信息管理与信息系统实验课程名称:Java SE程序设计运行结果如图所示:2、信号灯【代码1】//创建choice:choice=new Choice();【代码2】//创建choice添加itemRed:choice.addItem(itemRed);【代码3】//创建choice添加itemYellow:choice.addItem(itemYellow);【代码4】//创建choice添加itemGreen:choice.addItem(itemGreen);【代码5】//将当前窗口注册为choice的ItemEvent事件监视器:choice.addItemListener(this);【代码6】// choice返回被选中的条目:String item= choice.getSelectedItem();运行结果如图所示:3、布局与日历【代码1】//将pCenter的布局设置为7行7列的GridLayout 布局:pCenter.setLayout(new GridLayout(7,7));【代码2】//pCenter添加组件titleName[i]:pCenter.add(titleName[i]);【代码3】//pCenter添加组件labelDay[i]:pCenter.add(labelDay[i]);【代码4】// 窗口添加scrollPane在中心区域:add(pCenter,BorderLayout.CENTER);【代码5】// 窗口添加pNorth 在北面区域:add(pNorth,BorderLayout.NORTH);【代码6】// 窗口添加pSouth 在南区域:add(pSouth,BorderLayout.SOUTH);运行结果如图所示:4、方程求根【代码1】//当前窗口作为controlButton的ActionEvent事件的监视器:controlButton.addActionListener(this);【代码2】//textA调用方法获取其中的文本:double a=Double.parseDouble(textA.getText());【代码3】//textB调用方法获取其中的文本:double b=Double.parseDouble(textB.getText());【代码4】// textC调用方法获取其中的文本:运行结果如图所示:5、实体对话框【代码1】//对话框设置为有模式:this.setModal(true);【代码2】//对话框设置为可见:this.setVisible(true);【代码3】//对话框设置为不可见:this.setVisible(false);【代码4】//创建对话框:FontDialog dialog=new FontDialog(this); 【代码5】//对话框设置为可见:dialog.setVisible(true);【代码6】//对话框设置设置标题为“字体对话框”:dialog.setTitle("字体对话框");运行结果如图所示:6、英语单词拼写练习【代码1】//将当前对象注册为自身的焦点视器:this.addFocusListener(this);【代码2】//将当前对象注册为自身的标监视器:this.addMouseListener(this);【代码3】//将当前窗口注册为label[k]的键盘监视器:label[k].addKeyListener(this);【代码4】//判断按下的是否是←键):if(e.getKeyChar()== KeyEvent.VK_LEFT);【代码5】//判断按下的是否是→键:if(e.getKeyChar()==KeyEvent.VK_RIGHT);运行结果如图所示:7、JLayeredPane分层窗格【代码1】//pane将组件b5放置在DRAG_LAYER层:pane.add(b5, pane.DRAG_LAYER);【代码2】//pane将组件b4放置在POPUP_LAYER层:pane.add(b4, pane.POPUP_LAYER);【代码3】//pane将组件b3放置在MODAL_LAYER层:pane.add(b3, pane.MODAL_LAYER);【代码4】//pane将组件b2放置在PALETTE_LAYER层:pane.add(b2, pane.PALETTE_LAYER);【代码5】//pane将组件b3放置在DEFAULT_LAYER层:pane.add(b1, pane.DEFAULT_LAYER);运行结果如图所示:8、使用表格显示日历【代码1】//使用数组rili和name创建table:table=new JTable(rili,name);【代码2】//使用数组rili和name创建table:table=new JTable(rili,name);【代码3】//使用数组rili和name创建table:table=new JTable(rili,name);运行结果如图所示:9、多文档界面(MDI)【代码1】//创建JdesktopPane对象:desk=new JDesktopPane();【代码2】//desk返回其中的全部内部窗体:JInternalFrame a[]=desk.getAllFrames();【代码3】//desk 将a[i]放置在DEFAULT_LAYER层:desk.setLayer(a[i],JDesktopPane.DEFAULT_LAYER);【代码4】//desk 将newInternalFrame放置在DRAG_LAYER层:desk.add(newInternalFrame,JDesktopPane.DRAG_LAYER);运行结果如图所示:之后在经过多次调试,程序运行正常,运行结果如图:3、在做第六个实验“拼写单词”时,在用键盘左右移动字母时,出现了“NULL”值。
实验二图形用户界面设计一、实验目的通过编程和上机实验,了解图形用户界面基本组件窗口、按钮、文本框、选择框等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
二、实验要求1.掌握在窗体中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。
2.理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
3.掌握编写独立运行的窗口界面的方法。
三、实验内容Ⅰ基本指导图形用户界面(Graphic User Interface ,简称GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。
组件(Component)是构成GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。
组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等。
通过容器的add()方法把组件加入到容器中。
Awt和swing的基本使用方法是一致的,在本实验中大部分以awt为例。
1 实现基本的登录窗口,掌握窗体以及常用组件的使用方式。
import java.awt.*;import javax.swing.*;public class LoginFrame extends JFrame{public LoginFrame(){super("User Login");this.setSize(200,120); //设置框架尺寸this.setLocation(300,240);this.setLayout(new FlowLayout()); //框架流布局,居中this.add(new Label("userid")); //创建标签,添加到框架上this.add(new TextField("user1",10)); //创建文本行this.add(new Label("password"));this.add(new TextField(10)); //创建20列的文本行this.add(new Button("Ok")); //创建按钮this.add(new Button("Cancel"));this.setVisible(true); //显示框架}public static void main(String arg[]){new LoginFrame();}}2观察以下程序并自己尝试布局管理器的使用import java.awt.*;import javax.swing.*;class HelloSwing {public static void main(String[] args) {JFrame frame = new JFrame("HelloSwing");// frame.setLayout(new FlowLayout( FlowLayout.RIGHT));frame.setSize(600,400);/*Button btnEast=new Button("东");btnEast.setPreferredSize(new Dimension(220,12));Button btnWest=new Button("西");Button btnNorth=new Button("北");Button btnSouth=new Button("南");Button btnCenter=new Button("中");frame.add(btnEast,BorderLayout.EAST);frame.add(btnWest,BorderLayout.WEST);frame.add(btnNorth,BorderLayout.NORTH);frame.add(btnSouth,BorderLayout.SOUTH);frame.add(btnCenter,BorderLayout.CENTER);frame.setVisible(true);*/Button btn[]; // 声明按钮数组String str[]={"1","2","3","4","5","6","7","8","9"};frame.setLayout(new GridLayout(3,3));btn=new Button[str.length]; // 创建按钮数组for(int i=0;i<str.length;i++){btn[i]=new Button(str[i]); frame.add(btn[i]);}frame.setVisible(true); }}3 编程实现简单的标签、按钮组件,实现点击按钮,改变标签的功能。
JavaSwing图形用户界面的设计与实现方法一、引言随着计算机技术的不断发展,图形用户界面(Graphical User Interface,GUI)在软件开发中扮演着越来越重要的角色。
作为用户与软件之间的沟通桥梁,GUI的设计与实现至关重要。
本文将介绍JavaSwing图形用户界面的设计与实现方法,帮助开发人员更好地利用JavaSwing创建出功能强大、用户友好的GUI界面。
二、Swing概述JavaSwing是Java提供的一套GUI组件库,它基于Java AWT (Abstract Window Toolkit)构建而成,相对于AWT,Swing提供了更加丰富的组件和更高的灵活性。
Swing拥有独立于平台的外观,通过Java代码实现GUI界面的构建和事件处理。
使用Swing可以快速实现各种界面风格,并且易于调整和扩展。
三、Swing组件的使用1. 容器类组件:容器类组件是其他组件的父容器,对应于应用程序的窗口或面板,常用的容器类组件有JFrame、JPanel、JDialog等。
通过创建容器类组件,可以将其他组件添加到容器中并管理和布局。
2. 基本组件:基本组件是构建GUI界面的基本元素,常用的基本组件有JButton、JLabel、JTextField等。
它们可以用于实现用户输入、数据展示、按钮点击等交互操作。
3. 高级组件:高级组件是Swing提供的一些特殊功能的组件,如JTable、JTree、JFileChooser等。
它们可以用于展示表格、树状结构、文件选择等复杂的用户交互功能。
四、事件处理为了响应用户的操作,GUI界面需要进行事件处理。
在JavaSwing中,事件处理分为两个阶段:事件生成和事件响应。
当用户与界面进行交互时,会生成相应的事件,如按钮点击、鼠标移动等。
开发人员需要实现事件的监听器,并在事件发生时触发相应的操作。
五、界面布局界面布局是指组件在容器中的排列方式。
在Swing中,界面布局主要通过布局管理器(Layout Manager)实现。
JDialog是Java Swing 图形用户界面(GUI)库中的一个类,用于创建对话框。
JDialog是一个顶级窗口,可以包含其他组件,如按钮、文本框等。
以下是使用JDialog的一些基本步骤:1.创建JDialog 实例java复制代码JDialog dialog = new JDialog();2.设置对话框的标题java复制代码dialog.setTitle("My Dialog");3.添加内容您可以使用add()方法向对话框添加组件,例如:java复制代码JButton button = new JButton("OK");dialog.add(button);设置对话框的大小4.java复制代码dialog.setSize(300, 200);5.设置对话框的位置java复制代码dialog.setLocationRelativeTo(null); // 这将使对话框在屏幕中央显示6.显示对话框使用setVisible()方法来显示对话框:java复制代码dialog.setVisible(true);7.关闭对话框当您完成对话框的内容并希望关闭它时,可以调用dispose()方法:java复制代码dialog.dispose();8.添加事件监听器例如,为按钮添加一个点击事件监听器:java复制代码button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {// 在这里处理按钮点击事件dialog.dispose(); // 关闭对话框}});9.模态对话框和非模态对话框•模态对话框:当一个对话框被设置为模态时,它会阻止用户与其他非模态对话框交互,直到该模态对话框被关闭。
这可以通过调用setModal(true)来实现。
实验报告课程名称: Java语言程序设计院(系):管理学院专业班级:姓名:学号:指导教师:2013年6月9日《Java语言程序设计》上机实验报告序号实验五组号 1 成绩名称图形用户界面AWT/Swing组件学时 2评阅教师签名: 2013年月日一、实验目的1.熟悉Java AWT、swing组件的功能;2.掌握常用组件的事件接口;3.会应用AWT、swing组件进行应用程序设计。
二、实验内容AWT、swing组件应用程序设计设计(完成windows计算器两种以上的运算功能)。
三、实验硬件、软件环境1.PC计算机一台,配置为CPU为P42.8G,内存为512M,硬盘为80G;2.WindowsXP + JSDK1.6 + JCreatorV4。
四、实验算法设计在设计计算其界面的基础上,添加事件监视,对按钮进行各种操作。
五、程序设计/*** @(#)Calculator.java*** @author* @version 1.00 2013/6/9*/import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends JFrame{private final JTextField textField;private String num="0";private String operator="+";private String result="0";public static void main(String agrs[]){Calculator frame=new Calculator();frame.setVisible(true);}public Calculator(){super();setTitle("计算器");setResizable(false);setBounds(100,100,208,242);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JPanel viewPanel=new JPanel();add(viewPanel,BorderLayout.NORTH);textField=new JTextField();textField.setText(num);textField.setColumns(18);textField.setEditable(false);textField.setHorizontalAlignment(SwingConstants.RIGHT);viewPanel.add(textField);add(viewPanel,BorderLayout.NORTH);final JPanel clearButtonPanel=new JPanel();clearButtonPanel.setLayout(new GridLayout(1,3,5,5));add(clearButtonPanel,BorderLayout.CENTER);String[] clearButtonNames={"<-","CE","C"};for(int i=0;i<3;i++){final JButton button=new JButton(clearButtonNames[i]);button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {JButton button=(JButton)e.getSource();String text=button.getText().trim();if(text.equals("<-")){int length=num.length();if(length==1)num="0";else num=num.substring(0,length-1);}else if(text.equals("CE")){num="0";}else{num="0";operator="+";result="0";}textField.setText(num);}});clearButtonPanel.add(button);};final JPanel inputButtonPanel=new JPanel();final GridLayout gridLayout=new GridLayout(4,0,10,10);inputButtonPanel.setLayout(gridLayout);add(inputButtonPanel,BorderLayout.SOUTH);String[][]inputButtonNames={{"1","2","3","+"},{"4","5","6","-"},{"7","8","9","*"},{".","0","=","/"} };for(int row=0;row<4;row++){for(int col=0;col<4;col++){final JButton button=new JButton(inputButtonNames[row][col]);button.setName(row+""+col);button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){JButton button=(JButton)e.getSource();String name=button.getName();int row=Integer.valueOf(name.substring(0,1));int col=Integer.valueOf(name.substring(1,2));100if(col==3){count();textField.setText(result);operator=button.getText();}else if(row==3){if(col==0){if(num.indexOf(".")<0){num=num+button.getText();textField.setText(num);}}else if(col==1){if(num.indexOf(".")>0){num=num+button.getText();textField.setText(num);}else{if(!num.substring(0,1).equals("0")){num=num+button.getText();textField.setText(num);}}}else{count();textField.setText(result);operator="+";}}else{if(num.equals("0"))num=button.getText();else num=num+button.getText();textField.setText(num);}}void count(){float n=Float.valueOf(num);float r=Float.valueOf(result);if(r==0){result=num;num="0";}else{if(operator.equals("+")){r=r+n;}else if(operator.equals("-")){r=r-n;}else if(operator.equals("*")){r=r*n;}else {r=r/n;}num="0";result=r+"";}}});inputButtonPanel.add(button);}}}}六、程序测试记录及结果、运行说明七、实验总结系统的设计程序,完成程序前后关照,解决每个问题关键要求。
实验名称:基于Java的图形用户界面设计一、实验目的1. 熟悉Java图形用户界面设计的基本概念和常用组件。
2. 掌握Swing库的使用,能够设计简单的图形用户界面。
3. 培养编程实践能力,提高问题解决能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE for Java Developers3. 编程语言:Java4. 开发库:Swing库三、实验内容1. 创建一个简单的图形用户界面,包括窗口、按钮、标签、文本框等组件。
2. 实现按钮点击事件,输出信息到控制台。
3. 设计一个带有滚动条的面板,展示大量数据。
4. 使用布局管理器(如FlowLayout、BorderLayout、GridLayout等)对界面进行布局。
四、实验步骤1. 创建一个名为“GUIProject”的Java项目,在Eclipse中导入Swing库。
2. 创建一个名为“MainFrame”的类,继承自JFrame类,作为主窗口。
3. 在“MainFrame”类中,添加以下代码:```javaimport javax.swing.;import java.awt.;public class MainFrame extends JFrame {public MainFrame() {// 设置窗口标题setTitle("图形用户界面设计");// 设置窗口大小setSize(500, 400);// 设置关闭操作setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置布局管理器setLayout(new BorderLayout());// 创建按钮JButton button = new JButton("点击我");// 添加按钮到窗口add(button, BorderLayout.CENTER);// 添加事件监听器button.addActionListener(e -> {System.out.println("按钮被点击了!");});}public static void main(String[] args) {// 创建窗口实例MainFrame frame = new MainFrame();// 显示窗口frame.setVisible(true);}}```4. 修改“MainFrame”类,添加滚动条和标签:```javaimport javax.swing.;import java.awt.;public class MainFrame extends JFrame {public MainFrame() {// ...(省略其他代码)// 创建面板JPanel panel = new JPanel();// 设置布局管理器panel.setLayout(new GridLayout(0, 1));// 创建标签JLabel label = new JLabel("这是一个标签");// 添加标签到面板panel.add(label);// 创建滚动条JScrollPane scrollPane = new JScrollPane(panel); // 添加滚动条到窗口add(scrollPane, BorderLayout.CENTER);}// ...(省略其他代码)}```5. 运行程序,观察效果。
JAVA实验-图形界面设计广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室2014年11月14日一、实验目的实验十图形用户界面(1)1.了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,2.了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
实验十一图形用户界面(2)1.了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,2.了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
二、实验器材MacBook Pro一台操作系统:OS X Yosemite编程软件:eclipse三、实验要求实验十图形用户界面(1)1. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
2. 掌握编写独立运行的窗口界面的方法。
3. 了解Java Swing 组件的使用方法。
4. 了解对话框的使用方法。
实验十一图形用户界面(2)1. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。
2. 掌握编写独立运行的窗口界面的方法。
3. 了解Java Swing 组件的使用方法。
4. 了解对话框的使用方法。
四、实验过程原始数据记录实验十图形用户界面(1)1. 如下图所示,用了三个文本框,第一个文本框给用户输入商品单价,第二个则是给用户输入商品数量,第三个用于显示总金额。
代码:import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import javax.swing.SwingConstants;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.text.BadLocationException;import javax.swing.text.Document;public class test_2_1_1 extends JFrame implements ActionListener{public static void main(String[] args) {// TODO Auto-generated method stubtest_2_1_1 good = new test_2_1_1();}JTextField goodPriceTF;JTextField goodNumTF;JTextField sumPriceTF;JLabel goodPriceTipsLabel;JLabel goodNumTipsLabel;Boolean canCal = false;public test_2_1_1(){super("商品价格计算器");setSize(435, 135);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置JFrame是否可以改变大小。
JavaSwing使⽤总结(转载)随笔转载⾃:地址:1. GUI编程引⾔以前的学习当中,我们都使⽤的是命令交互⽅式: 例如:在DOS命令⾏中通过javac java命令启动程序.软件的交互的⽅式: 1. 命令交互⽅式 图书管理系统 2. 图形交互⽅式 ava提供了专业的API⽤于开发图形⽤户界⾯ GUI--> Graphic User Interface 将要了解GUI API的框架结构,以及GUI组件以及组件之间的关系,容器和布局管理器,颜⾊,字体等.2. GUI的分类2.1. AWT Java1.0版本的图形⽤户界⾯库,设计⽬标是帮助程序员编写在所有平台上都能良好表现的GUI程序。
为了实现这个⽬标Java1.0提供了抽象窗⼝⼯具集(AWT),但是这个⽬标并没有达到。
AWT在所有的系统上表现都不好。
因为:最初版本的AWT是在⼀个⽉内构思,设计和实现的(Think in Java )。
Abstract Window Toolkit 抽象窗⼝⼯具集 Java将图形⽤户界⾯相关的类捆绑在了⼀起,放在了⼀个称之为抽象窗⼝⼯具集的库中.AWT适合开发简单的图形⽤户界⾯,并不适合开发复杂的GUI项⽬. 位于: java.awt.* 中,定义了很多的组件类,开发者可以直接创建对象加以使⽤ 缺点: 所有的图形界⾯都依赖于底层的操作系统,容易发⽣于特定平台相关的故障. AWT调⽤本地系统资源⽣成图形化界⾯, 依赖本地平台. 1.02.2. SwingSUN公司对AWT进⾏了升级,基于AWT,推出了⼀种更稳定,更通⽤和更灵活的库.称之为Swing组件库(Swing component)。
既然都是⽤于GUI设计的组件库,那么为了区分Swing组件类和对应的AWT组件类,Swing组件类都已字母J为前缀.位于:javax.swing.* 中,提供了和AWT中等同的所有的组件类,但是类名的前⾯多加了⼀个J.SWING可以跨平台. 1.2我们主要学习Swing GUI组件.3. Java GUI APIGUI API包含的类分为三个部分:组件类(component class) 容器类(container class),和辅助类(helper class)1. 组件类是⽤来创建⽤户图形界⾯的,例如JButton,JLabel,JTextField.2. 容器类是⽤来包含其他组件的,例如JFrame,JPanel3. 辅助类是⽤来⽀持GUI组件的,例如Color,Font3.1. 组件类在图形⽤户界⾯程序中当我们想要创建按钮、复选框和滚动条等这些可以显⽰在屏幕上的对象,该如何创建。
《Java语言程序设计》实验报告private JButton button_1,button_2,button_add,button_clear;public Simcal(){super("Calculator");this.setBounds(300, 240, 320, 90);this.setResizable(false);this.setBackground(java.awt.Color.lightGray);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));text = new JTextField("",27);text.setHorizontalAlignment(JTextField.RIGHT);text.setEditable(false);caretUpdate(null);this.getContentPane().add(text);text.addCaretListener(this);//JPanel panel = new JPanel(new GridLayout(1,4));//this.getContentPane().add(panel);button_1 = new JButton("1");button_1.addActionListener(this);//panel.add(button_1);this.getContentPane().add(button_1);button_add = new JButton("+");button_add.addActionListener(this);//panel.add(button_add);this.getContentPane().add(button_add);button_2 = new JButton("2");button_2.addActionListener(this);//panel.add(button_2);this.getContentPane().add(button_2);button_clear = new JButton("C");button_clear.addActionListener(this);//panel.add(button_clear);this.getContentPane().add(button_clear);this.setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==button_1){text.setText(text.getText()+"1");}if(e.getSource()==button_add){text.setText(text.getText()+"+");}if(e.getSource()==button_2){text.setText(text.getText()+"2");}if(e.getSource()==button_clear){text.setText("");}}public void caretUpdate(CaretEvent e){}public static void main(String arg[]){new Simcal();}}运行结果:(2)计算器如果时间允许,实现计算器的加、减、乘、除等基本运算,参考如下图形界面。
JAVA实验报告课程名称 java实验实验名称 JAVA Swing 图形用户界面和对话框学院__计算机学院__专业班级__软件__姓名__ ____ 学号_ __实验日期:2015年4月30 日一.实验目的(1)学习处理ActionEven事件;(2)学习使用布局类;(3)学习焦点、鼠标和键盘事件;(4)学习使用对话框。
二.实验内容(-)实验题目一:算术测试,编写一个算术测试小软件,用来训练小学生的算术能力。
1.要点分析:程序有三个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确。
ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面给出题目的答案;MainClass是软件的主类。
2.程序源代码:package算术测试;public class MainClass {public static void main(String args[]){ComputerFrame frame;frame=new ComputerFrame();frame.setTitle("算术测试");frame.setBounds(100,100,650,180);}}package算术测试;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ComputerFrame extends JFrame {JMenuBar menubar;JMenu choiceGrade;JMenuItem grade1,grade2;JTextField textOne,textTwo,textResult;JButton getProblem,giveAnswer;JLabel operatorLabel,message;Teacher teacherZhang;ComputerFrame(){teacherZhang=new Teacher();teacherZhang.setMaxInteger(20);setLayout(new FlowLayout());menubar=new JMenuBar();choiceGrade=new JMenu("选择级别");grade1=new JMenuItem("幼儿级别");grade2=new JMenuItem("儿童级别");grade1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){teacherZhang.setMaxInteger(10);}});grade2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){teacherZhang.setMaxInteger(50);}});choiceGrade.add(grade1);choiceGrade.add(grade2);menubar.add(choiceGrade);setJMenuBar(menubar);textOne=new JTextField(5);//创建文本框,其可见字符长为5textTwo=new JTextField(5);textResult=new JTextField(5);operatorLabel=new JLabel("+");operatorLabel.setFont(new Font("Arial",Font.BOLD,20));message=new JLabel("你还没有回答呢");getProblem=new JButton("获取题目");giveAnswer=new JButton("确认答案");add(getProblem);add(textOne);add(operatorLabel);add(textTwo);add(new JLabel("="));add(textResult);add(giveAnswer);add(message);textResult.requestFocus();textOne.setEditable(false);textTwo.setEditable(false);getProblem.setActionCommand("getProblem");textResult.setActionCommand("anwser");giveAnswer.setActionCommand("answer");teacherZhang.setJTextField(textOne,textTwo,textResult);teacherZhang.setJLabel(operatorLabel,message);getProblem.addActionListener(teacherZhang);giveAnswer.addActionListener(teacherZhang);textResult.addActionListener(teacherZhang);setVisible(true);validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);}}package算术测试;import java.util.Random;import java.awt.event.*;import javax.swing.*;public class Teacher implements ActionListener{int numberOne,numberTwo;String operator="";boolean isRigth;Random random;int maxInteger;JTextField textOne,textTwo,textResult;JLabel operatorLabel,message;Teacher(){random=new Random();}public void setMaxInteger(int n){maxInteger=n;}public void actionPerformed(ActionEvent e){String str=e.getActionCommand();if(str.equals("getProblem")){numberOne=random.nextInt(maxInteger)+1;//1~最大整数之间的随机数numberTwo=random.nextInt(maxInteger)+1;double d=Math.random();//获取0~1之间的随机数if(d>=0.5)operator="+";elseoperator="-";textOne.setText(""+numberOne);textTwo.setText(""+numberTwo);operatorLabel.setText(operator);message.setText("请回答");textResult.setText(null);}else if(str.equals("answer")){String answer=textResult.getText();try{int result=Integer.parseInt(answer);if(operator.equals("+")){if(result==numberOne+numberTwo)message.setText("你回答正确");elsemessage.setText("你回答错误");}else if(operator.equals("-")){if(result==numberOne-numberTwo)message.setText("你回答正确");elsemessage.setText("你回答错误");}}catch(NumberFormatException ex){message.setText("请输入数字字符");}}}public void setJTextField(JTextField... t){ textOne=t[0];textTwo=t[1];textResult=t[2];}public void setJLabel(bel){operatorLabel=label[0];message=label[1];}}3.实验结果:4.实验后练习:(1)模仿本实验的代码,再增加小学生级别。
(2)给上述程序增加测试乘法的功能。
(二)实验题目二:布局与日历。
1.要点分析:设置一个窗口,该窗口的布局为BorderLayout布局。
窗口的中心添加一个JPanel容器pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。
窗口的北面添加一个JPanel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月日历;单击previousMonth按钮,可以显示当前月的上一月的日历。
2.程序源代码:package布局与日历;public class CalendarMainClass {public static void main(String args[]){CalendarFrame frame=new CalendarFrame();frame.setBounds(100,100,360,300);frame.setVisible(true);frame.setYearAndMonth(2015,5);}}package布局与日历;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;public class CalendarFrame extends JFrame implements ActionListener{/****/private static final long serialVersionUID =-4568452730166791416L;JLabel labelDay[]=new JLabel[42];JButton titleName[]=new JButton[7];String name[]={"日","一","二","三","四","五","六"};JButton nextMonth,previousMonth;CalendarBean calendar;JLabel showMessage=new JLabel("",JLabel.CENTER);int year=2011,month=2;public CalendarFrame() {// TODO自动生成的构造函数存根JPanel pCenter=new JPanel();pCenter.setLayout(new GridLayout(7,7));for(int i=0;i<7;i++){titleName[i]=new JButton(name[i]);titleName[i].setBorder(newSoftBevelBorder(BevelBorder.RAISED));pCenter.add(titleName[i]);}for(int i=0;i<42;i++){labelDay[i]=new JLabel("",JLabel.CENTER);labelDay[i].setBorder(newSoftBevelBorder(BevelBorder.LOWERED));pCenter.add(labelDay[i]);}calendar=new CalendarBean();nextMonth=new JButton("下月");previousMonth=new JButton("上月");nextMonth.addActionListener(this);previousMonth.addActionListener(this);JPanel pNorth=new JPanel(),pSouth=new JPanel();pNorth.add(previousMonth);pNorth.add(nextMonth);pSouth.add(showMessage);add(pCenter, BorderLayout.CENTER);add(pNorth,BorderLayout.NORTH);add(pSouth,BorderLayout.SOUTH);setYearAndMonth(year,month);setDefaultCloseOperation(DISPOSE_ON_CLOSE);}public void setYearAndMonth(int year2, int month2) { // TODO自动生成的方法存根calendar.setyear(year2);calendar.setMonth(month2);String day[]=calendar.getCalender();for(int i=0;i<42;i++){labelDay[i].setText(day[i]);}showMessage.setText("日历"+calendar.getYear()+"年"+calendar.getMonth()+"月");}@Overridepublic void actionPerformed(ActionEvent e) {// TODO自动生成的方法存根if(e.getSource()==nextMonth){month=month+1;if(month>12)month=1;calendar.setMonth(month);String day[]=calendar.getCalender();for(int i=0;i<42;i++)labelDay[i].setText(day[i]);}else if(e.getSource()==previousMonth){month=month-1;if(month<1)month=12;calendar.setMonth(month);String day[]=calendar.getCalender();for(int i=0;i<42;i++)labelDay[i].setText(day[i]);}showMessage.setText("日历"+calendar.getYear()+"年"+calendar.getMonth()+"月");}}package布局与日历;import java.util.Calendar;public class CalendarBean {String day[];int year=2005,month=0;public void setyear(int year) {// TODO自动生成的方法存根this.year=year;}public int getYear() {// TODO自动生成的方法存根return year;}public void setMonth(int month) {// TODO自动生成的方法存根this.month=month;}public int getMonth() {// TODO自动生成的方法存根return month;}public String[] getCalender() {// TODO自动生成的方法存根String a[]=new String[42];Calendar 日历=Calendar.getInstance();日历.set(year,month-1,1);int星期几=日历.get(Calendar.DAY_OF_WEEK)-1;int day=0;if(month==1||month==3||month==5||month==7||month==8||month= =10||month==12)day=31;if(month==4||month==6||month==9||month==11||month==10) day=30;if(month==2){if((year%4==0)&&(year%100!=0)||year%400==0)day=29;elseday=28;}for(int i=星期几,n=1;i<星期几+day;i++){a[i]=String.valueOf(n);n++;}return a;}}3.实验结果4.课后练习:在CalenderFrame类中增加一个JTextField文本框,用户可以通过在文本框中输入年份来修改calender对象的int成员。