资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,NCEPU,*,Click to edit Master title style,22 九月 2024,Swing,常用组件,编写一个计算器,所需要的知识点,常用组件和容器的使用方法及功能,AWT,事件处理模型,例,Swing,的常用组件,JLabel,JLabel,(,标签,),是,用户只能查看不能修改的,文本,/,图像,显示区域。,Swing,的常用组件,-,JTextField,JTextField(,单行文本域,),是,一个单行条形文本区,能够接收输入、显示输出。,获得文本域的内容,x= Integer.parseInt(text1,.,getText().trim();,重新设置文本域的内容,resultText.setText(s,);,Swing,的常用组件,-,JTextField,setText(String s),设置文本框中的文本,getText(),获取文本框中的文本,setEditable(boolean b),指定文本框的可编辑性。创建的文本框默认为可编辑的,获取两个文本域的输入并求和,然后显示在第三个文本域中。,Swing,的常用组件,JTextField,import .*;,import .*;,import .*;,public class TFMath ,public static void main(String args) ,new TFFrame().launchFrame();,class TFFrame extends JFrame ,JTextField num1, num2, num3;,public void launchFrame() ,num1 = new JTextField(10);,num2 = new JTextField(10);,num3 = new JTextField(15);,JLabel lblPlus = new JLabel(+);,JButton btnEqual = new JButton(=);,btnEqual.addActionListener(new MyMonitor();,setLayout(new FlowLayout();,add(num1);,add(lblPlus);,add(num2);,add(btnEqual);,add(num3);,pack();,setVisible(true);,Swing,常用的组件,文本域,private class MyMonitor implements ActionListener ,public void actionPerformed(ActionEvent e) ,int n1 = Integer.parseInt(num1.getText();,int n2 = Integer.parseInt(num2.getText();,num3.setText( + (n1+n2);,Swing,的常用组件,-,JPasswordField,JPasswordField(,口令框,),接受,用户的输入,但不会真正显示出来,而是显示回显符。,密码域,JPasswordField,import .*;,import .*;,import .*;,public class TFPassword ,public static void main(String args) ,new TFFrame2();,密码域,JPasswordField,class TFFrame2 extends JFrame,TFFrame2(),JPasswordField pf = new JPasswordField();,add(pf);,pf.addActionListener(new TFActionListener2();,pack();,setVisible(true);,密码域,JPasswordField,class TFActionListener2 implements ActionListener,public void actionPerformed(ActionEvent e),JPasswordField pf = ();,();,();,密码域,JPasswordField,Swing,的常用组件,-,JPasswordField,实战:实现上面的图形用户界面。,Swing,的常用组件,-,JTextArea,JTextArea(,多行文本框,),可以输入或输出多行文本。,设定是否可编辑,setEditable(Boolean b),JTextArea(String text, int rows,int columns),指定文本创建文本区,指定行数和列数,换行方式:,手动换行,自动换行:通过设置换行属性来避免手动换行。,增加滚动条:通过把文本区插入到一个滚动窗格中来实现。这也是给其他组件添加滚动条的方法。,textArea.setLineWrap(true);,JScrollPane scrollPane = new JScrollPane(textArea);,Swing,的常用组件,-,JTextArea,文本区的三种显示方式,Swing,的常用组件,-,JTextArea,例:创建包含,文本区、文本框,和,“提交”按钮,的窗口。 在文本区中输入文字,单击“提交”按钮,文本 框中会出现同样的文字。,Swing,的常用组件,-,JTextArea,import .*; import .*;,class JTextAreaEx extends JFrame,JTextArea ta; JTextField t; JButton b;,JTextAreaEx(),setSize(400,250);,setLayout(new FlowLayout();,Container c=getContentPane();,setVisible(true);,ta=new JTextArea(5,10);,/,创建文本区、文本框和按钮,ta.setLineWrap(true);,/,自动换行,只添加垂直滚动条,JScrollPane scrollPane = new JScrollPane(ta);,/,加滚动条,scrollPane.setBorder(BorderFactory.createLoweredBevelBorder();/,设置边界,c.add(scrollPane);,t=new JTextField(10);,b=new JButton(,提交,);,c.add(b);,c.add(t);,pack();,public static void main(String args), JTextAreaEx tae=new JTextAreaEx();,public void actionPerformed(ActionEvent e),(); ,其他,Swing,组件的使用,Swing,的常用组件,复选框,JCheckBox,JCheckBox(,复选框,),有选中和未选中两种状态,允许用户从一组选项中进行多个选择。,设置复选框的文本,setText,获取复选框的文本,getText,常用的构造方法有:,JCheckBox(),JCheckBox(Icon icon),JCheckBox(Icon icon, boolean selected),JCheckBox(String text),JCheckBox(String text, boolean selected),JCheckBox(String text, Icon icon),JCheckBox(String text, Icon icon, boolean selected),Swing,的常用组件,复选框,JCheckBox,JCheckBox,的相关事件类,事件响应,用户点击复选框使其选中状态发生变化时会引发,ItemEvent,事件。,实现,ItemListener,接口的,itemStateChanged(),方法。,public void,addItemListener,( ItemListener l ),设置复选框的事件监听器。,查阅,JDK,文档,学习,ItemEvent,类的常用方法。,例题:创建如下窗口,包含三个复选框和一个面板,选中,某一复选框后,面板的背景色就变成相应的颜色。,Swing,的常用组件,复选框,JCheckBox,import .*;import .*;,public class CheckBoxExp implements ItemListener,Frame f; Panel p1, p2;,Checkbox ck1,ck2,ck3;,public void display(), f = new Frame (,复选框练习,);,ck1=new Checkbox(,红色,);,ck2=new Checkbox(,黄色,);,ck3=new Checkbox(,蓝色,);,p1=new Panel(); p2=new Panel();,f.add(p1,North); f.add(p2);,p1.add(ck1); p1.add(ck2); p1.add(ck3);,f.setSize(400, 200); (true);,ck1.addItemListener(this);,ck2.addItemListener(this);,ck3.addItemListener(this); ,public void itemStateChanged(ItemEvent e),()=ck1),p2.setBackground(Color.red);,else ()=ck2),p2.setBackground(Color.yellow);,else,p2.setBackground(Color.blue);,public static void main(String args),new CheckBoxExp().display();,Swing,常用的组件,单选框,JRadioButton,JRadioButton(,单选按钮,),通常是成组使用的,可以通过,ButtonGroup,类进行管理。,常用的构造方法有:,JRadioButton(),JRadioButton(Icon icon),JRadioButton(Icon, boolean selected),JRadioButton(String text),JRadioButton(String text, boolean selected),JRadioButton(String text, Icon icon),JRadioButton(String text, Icon icon, boolean selected),单选框,(,JRadioButton,),示例,要保证三个,JRadioButton,的互斥性应该把这三个控件放到同一个,ButtonGroup,中,Swing,的常用组件,组合框,JComboBox,JComboBox(,组合框,),是一种“多选一”的组件,可编辑每项的内容,而且每项的内容可以是任意类。,当用户选取组合框中的某一选择项时,可激发,ItemEvent,事件。,常用的构造方法有:,/,此构造函数使用缺省数据模型创建 JComboBox,public JComboBox(),/,包含指定数组元素的组合框,public JComboBox(Object items),Swing,的常用组件,组合框,JComboBox,创建组合框,向组合框对象里加入条目,JComboBox,jobsBox,= new,JComboBox,();,jobsBox.addItem(job1);,jobsBox.addItem(job2);,使用,String,数组创建,String,comboItem,=“job1”,”job2”;,JComboBox,jobsBox,=new,JComboBox(comboItem,);,对组合框是否能够被编辑也可以进行设置。,jobsBox.setEditable(true,);,Swing,的常用组件,组合框,JComboBox,组合框的内容可以动态变化,addItem,方法,:把条目添加到列表的末尾;,insertItermAt,方法,:将新条目添加到列表的任何位置;,removeItem,方法和,removeItemAt,方法,:删除指定条目;,removeAllItems,方法:,删除所有条目。,jobsBox.insertItermAt(“job7”, 6); /,在第,7,个位置增加“,job7”,条目。,jobsBox.removeItem(“job7”); /,删除“,job7”,条目。,jobsBox.removeItemAt(5); /,删除第,6,个条目,即“,job6”,。,(); /,删除所有条目。,Swing,的常用组件,组合框,JComboBox,当选择组合框的条目时,会产生单击事件(,ActionEvent,)和项事件(,ItemEvent,),。,组合框事件处理,方法,说明,public Object getSelectedItem(),返回当前选中项。注意类型。,public int getSelectedIndex(),返回选中项的位置。,列表中第一项的位置是,0,。,组合框,(,JComboBox,),常用的事件处理方式,Swing,的常用组件,列表框,(JList),JList(,列表框,),向用户显示一组选项,构造方法,public JList(),构造空列表,public JList ( Object ,listData),以数组中的元素构造一个,JList,。,String fontSize=“,小四”,“,四号”,“,小五”,“,五号”,;,JList list=new JList(fontSize);,public JList ( VectorlistData),以,Vector,中的元素构造一个,JList,。,JList(,列表框,),可以选择一项或多项 。,列表框,查阅,JDK,文档,学习,JList,类的常用方法及,相关事件。,Swing,的常用组件,列表框,(JList),建立列表框,前,需要指定所显示的列表条目:,String courses = “Math”, “English”, “Physics”, “Chemic”, “Biology”, “Politics”;,JList courseList = new JList(courses);,如果列表框比较长,而显示屏幕比较小,可以设置列表中显示的行数,同时使用,滚动条,:,courseList.setVisibleRowCount(4);,JScrollPane listScrollPane = new JScrollPane(courseList);,Swing,的常用组件,列表框,(JList),选择列表框中的多个条目有两种方式:连续条目选择和间断条目选择。,用户选择列表框条目时,列表框就会产生选择事件。将列表选择监听器,ListSelectionListener,添加给列表组件,并在该监听器中实现,valueChanged,方法:,courseList.addListSelectionListener(new,courseListener,();,.,class,courseListener,implements,ListSelectionListener,public void,valueChanged(ListSelectionEvent,event),.,获得用户所选择的列表框条目以及条目所在的索引号需要使用,getSelectedValues,方法和,getSelectedIndices,方法:,Object,selectedCourses,=,();,intselectedIndexCourses,=,();,Swing,的常用组件,列表框,(JList),例:创建一个包含列表框和文本框的窗口,要求单击或双 击列表框中某一选项后,文本框中显示该选项。,Swing,的常用组件,列表框,(JList),import .*; import .*;,public class List1 implements ActionListener ,ItemListener, Frame f; TextField tf1; List ls1;,public void display(), f = new Frame(,列表框练习,);,f.setSize(300,200); f.setLocation(300,300);,);,f.setLayout(new FlowLayout();,tf1 = new TextField (10); f.add(tf1); ls1 = new List(); f.add(ls1);,ls1.add(,北京,);ls1.add(,上海,);,ls1.add(,南京,);ls1.add(,西安,);,f.setVisible(true);,ls1.addActionListener(this);,ls1.addItemListener(this);,public void actionPerformed(ActionEvent e),tf1.setText(ls1.getSelectedItem();,public void itemStateChanged(ItemEvent e),tf1.setText(ls1.getSelectedItem();,public static void main(String arg), (new List1().display();,Swing,的常用组件,菜单,JMenuItem,类型有三种:,JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem,JMenuBar,JMmenu,JMenuItem,菜单的分类,菜单条式菜单(下拉菜单),弹出式菜单,菜单组件与其他组件不同,不能放入普通的容器,也无法用布局管理器对其加以控制,只能被放入菜单容器中。,Swing,的常用组件,菜单,下拉式菜单,下拉式菜单主要由三部分组成,菜单条,(JMenuBar),菜单,(JMenu),菜单项,(JMenuItem),。,菜单栏,菜单条,菜,单,菜单项,创建菜单栏,JMenuBar,menuBar,= new,JMenuBar,();,setJMenuBar(menuBar,);,创建菜单,JMenu,fileMenu,= new,JMenu(File,);,创建子菜单。,JMenu,optionMenu,= new,JMenu(Option,);,创建菜单项,JMenuItem,newfile,=new,JMenuItem,(,新建,);,创建下拉式菜单,将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。,创建菜单的步骤,import .*;,import .*;,public class MenuDemo extends JFrame implements ActionListener,JTextArea tf=new JTextArea();,JMenuBar mbar=new JMenuBar();,JMenu menu=new JMenu(,文件,);,JMenuItem newfile=new JMenuItem(,新建,);,JMenuItem open=new JMenuItem(,打开,);,JMenuItem close=new JMenuItem(,关闭,);,JMenuItem quit=new JMenuItem(,退出,);,创建菜单的步骤,public MenuDemo(),super(Menu,实例,);,newfile.addActionListener(this);,open.addActionListener(this);,close.addActionListener(this);,quit.addActionListener(this);,menu.add(newfile),;,menu.add(open);,menu.add(close); ();,menu.add(quit);,mbar.add(menu);,setJMenuBar(mbar);,add(tf);,addWindowListener(,new WindowAdapter(),public void windowClosing(WindowEvent e),System.exit(0);,);,public void actionPerformed(ActionEvent e),()=newfile) (,新建文件,);,()=open) (,打开文件,);,()=close) (,关闭文件,);,()=quit) System.exit(0);,public static void main(String args) ,JFrame f=new MenuDemo();,f.setSize(200,200);,f.setVisible(true);, ,同创建一般的菜单项几乎一样,只需注意复选框和单选按钮的不同构造方法以及单选按钮组的构建:,/,创建单选按钮菜单项“,Forward”,,并将“,Forward”,菜单项加入到“,Search”,菜单中。,ButtonGroup group = new ButtonGroup();,forwardItem = new JRadioButtonMenuItem(Forward);,group.add(forwardItem);,searchMenu.add(forwardItem);,/,创建复选框菜单项“,ToolBar”,,并加入到子菜单中。,JCheckBoxMenuItem toolItem = new JCheckBoxMenuItem(ToolBar);,optionMenu.add(toolItem);,创建复选框和单选按钮菜单项,菜单项的使用状态,菜单项能够被选取取决于菜单项的启用和禁用状态:,/,初始设置“,Save”,菜单项为禁用状态。,saveItem.setEnabled(false,);,快捷键和加速器,快捷键显示为带有下划线的字母,加速器则显示为菜单项旁边的组合键。:,/,设置菜单的快捷键。,fileMenu.setMnemonic(F,);,/,设置“,Exit”,菜单项的快捷键为“,T”,。,JMenuItem,exitItem,= new,JMenuItem(Exit, T);,/,设置“,Exit”,菜单项的加速器为“,Ctrl,T”,。,(,);,Swing,的常用组件,菜单,弹出式菜单,弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。,/,弹出式菜单。,popup = new,JPopupMenu,();,/,新建弹出式菜单中的“,Cut”,菜单项和监听器。,cutItemPop,= new,JMenuItem(Cut, C);,popup.add(cutItemPop,);,Swing,的常用组件,菜单,菜单示例,创建菜单栏,创建菜单加入到菜单栏中,创建菜单项加入到菜单中,最后将整个菜单栏加入到某个容器中,(,Frame,),事件处理,创建菜单的步骤,创建如下图所示的带菜单的窗口,完成相应的绘图功能。,import .*; import .*;,public class MenuExp implements ActionListener, Frame f;,MenuBar myMenuBar;,Menu menuDraw,menuHelp;,MenuItem itemCircle,itemRect,itemLine;,public void display(), f = new Frame(,带有菜单的窗口,);,f.setSize(300,300); f.setLocation(300,300);,);,myMenuBar=new MenuBar();,menuDraw=new Menu(,画图,);,menuHelp=new Menu(,帮助,);,myMenuBar.add(menuDraw); myMenuBar.add(menuHelp);,itemCircle=new MenuItem(,画圆,);,itemRect=new MenuItem(,画矩形,);,itemLine=new MenuItem(,画线,);,menuDraw.add(itemLine);,menuDraw.add(itemCircle);,menuDraw.add(itemRect);,f.setMenuBar(myMenuBar); f.setVisible(true);,itemCircle.addActionListener(this);,itemRect.addActionListener(this);,itemLine.addActionListener(this);,public void actionPerformed(ActionEvent e), ()=“,画圆”,) f.getGraphics().drawOval(100,100,150,150);,else ()=“,画矩形”,) f.getGraphics().drawRect(50,100,100,100);,else ()=“,画线”,) f.getGraphics().drawLine(100,100,200,200);,public static void main(String arg), (new MenuExp().display(); ,创建,JMenuItem,先创建一个,JMenuBar,对象,再创建若干个,JMenu,对象,添加处理事件,添加,JMenuItem,到,JMenu,添加,JMenu,到,JMenuBar,添加,JMenuBar,到容器,先创建一个,JMenuBar,对象,再创建若个,JMenu,对象,Swing,常用的组件,对话框,对话框分为模式对话框和无模式对话框。,模式对话框必须在用户处理完后才允许用户与主窗口继续进行交互。无模式对话框允许用户同时在对话框和程序剩余部分中输入信息。,在,Swing,中,提供了四种简单的对话框:,showMessageDialog,:,显示一条消息等待用户点击,OK,;,showConfirmDialog,:,显示一条消息并等待确认;,showOptionDialog,:,显示一条消息并等待用户在一组自定义选项中的选择;,showInputDialog,:,显示一条消息并等待用户的输入。,以,showConfirmDialog,为例:,对话框的使用,底部按钮的类型和对话框有密切的关系,对于,showMessageDialog,和,showInputDialog,对话框来说,只能有一组标准按钮,分别是,OK,和,OK/CANCEL,。对于,showConfirmDialog,,按钮可以包括四种:,DEFAULT_OPTION,,,YES_NO_OPTION,,,YES_NO_CANCEL_OPTION,,,OK_CANCEL_OPTION,。,int selection = (, /,父窗口,“,Are you sure?”, “Logout”, /,消息以及对话框标题, /,底部按钮类型,); /,消息类型,学生信息管理系统登陆界面中,当单击确定按钮,如果用户名、密码不正确,将弹出对话框提示错误,同时原先的框架窗口将不能被激活,必须选择对话框中的一个选项才能够退出对话框。,对话框的使用举例,对话框的使用举例,在某些程序中,需要调整线性的值,这时就需要滚动条。滚动条提供了易于操作的值的范围或区的范围。类提供了对滚动条的支持,它的父类是类。,Swing,的常用组件,滚动条,(,JSlider,),滚动条,(,JSlider,),JSlider(,滚动条,),是一种可以在某一数值范围内进行值的线性调整的组件。,JSlider,类的构造方法,:,JSlider(),创建范围为,0,至,100,,初值为,50,的水平滚动条。,JSlider(int orientation),创建范围为,0,至,100,,初值为,50,的水平或垂直滚动条。表示方向的值可为常量和,分别表示水平和垂直方向。,JSlider(int min, int max),创建范围为,min,至,max,,初值为,min,和,max,平均值的水平滚动条。,JSlider(int min, int max, int value),创建范围为,min,至,max,,初值为,value,的水平滚动条。,JSlider(int orientation, int min, int max, int value),创建范围为,min,至,max,,初值为,value,的水平或垂直滚动条。,Swing,的常用组件,滚动条,(,JSlider,),对创建的,JSlider,对象可显示数据刻度和数据值,也可设置边界等。与其他接口组件一样,滚动条产生一个可以控制的事件,ChangeEvent,。,Swing,的常用组件,滚动条,(,JSlider,),Swing,的常用组件,滚动条,(,JSlider,),Swing,常用的组件,表格(,JTable,),JTable(,表格,),的主要功能是把数据以二维表格的形式显示出来。,Swing,常用的组件,表格(,JTable,),JTable,类常用的方法有:,getModel() /,获得表格的数据来源对象,JTable(TableModel dm) /dm,对象中包含了表格要显示的数据,下列两个构造方法,第一个参数是数据,第二个参数是表格第一行中显示的内容,JTable(objectrowData,objectcolumnNams);,JTable(VectorrowData,VectorcolumnNams);,表格,(,JTable,),表格,(,JTable,),示例,1,JTable,的使用,生成一个,MyTableModel,类型的对象来表示数据。,用,TableModel,创建,JTable,对象。,在,JTable,中添加滚动条面板。,创建,JTable,表格:,从,AbstractTableModel,类中,继承得到,,getColumnCount,,,getRowCount,,,getColumnName,,,getValueAt,四个方法必须重写,要继承这个抽象类,必须实现的四个方法,用,TableModel,创建,JTable,在,JTable,中添加滚动条面板,表格,(,JTable,),可以选中列和行示例,2,设置选种模式,添加行选择事件,JOptionPane,类,Swing,中提供了,JOptionPane,类来实现类似,Windows,平台下的,MessageBox,的功能,同样在,Java,中也有,利用,JOptionPane,类中的各个,static,方法来生成各种标准的对话框,实现显示出信息、提出问题、警告、用户输入参数等功能。这些对话框都是模式对话框。,ConfirmDialog-,确认对话框,提出问题,然后由用户自己来确认,(,按,Yes,或,No,按钮,),InputDialog-,提示输入文本,MessageDialog-,显示信息,OptionDialog-,组合其它三个对话框类型。,作业,编写程序创建一个按钮和一个文本行,当单击按钮时将按钮上的文字显示在文本行中。,编写程序,在窗口中包含一个菜单,当选择菜单中的,Exit,菜单项时,可以关闭窗口结束程序的运行。,作业,设计实现一个计算器(参考,Windows,中的计算器)。,
展开阅读全文