《java6图像处理部分.ppt》由会员分享,可在线阅读,更多相关《java6图像处理部分.ppt(107页珍藏版)》请在三一办公上搜索。
1、1,GUI 编程,第六章,2,回顾,运行时发生的错误称为异常。Java 使用 try 和 catch 块来处理异常。try 块中的语句引发异常,而 catch 块则处理异常。可以同时使用多个 catch 块来分别处理各种异常类型。所有实现接口的类必须定义接口中的所有方法体。,3,目标,了解 AWT 包/Swing包及其组件掌握如何创建 GUI 程序掌握 Swing 组件的基本用法掌握如何使用布局管理器构造复杂的布局,4,(AWT)抽象窗口工具包,图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。AW
2、T提供用于创建生动而高效的GUI的各种组件。,5,java.awt 包中的类体系结构,6,不仅包含了所有AWT中的容器和组件,而且增加了很多新的容器和组件。Javax是java extension 的缩写,即java扩展包,它是JFC(Java Foundation Class)中的一员。具有图形用户界面的Swing应用程序都具有至少一个顶层容器。Swing中共有4个顶层容器:JFrame,JDialog,JApplet,JWindow。,Swing,7,Swing组成,容器(Container):容器是用来摆放图形用户界面中各种组件的一个矩形范围。一般说来,一个应用程序的图形用户界面必须有一
3、个顶层容器,比如一个窗口。组件(Component):组成用户界面的基本组成单位,它不能包含任何其他的组件或容器。主要是用来接收用户指令的,例如:按钮、复选框、下拉菜单等等。,8,容器,可以存放组件的区域,可在容器上进行绘制和着色 javax.swing包中的Container类可直接或间接派生出两个常用容器:框架(JFrame类)和面板(JPanel类)。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的区域。,9,容器 框架,框架是独立于Applet和浏览器的一个窗口。可以通过以下任一构造函数来创建:JFrame():创建一个不含标题的标准窗口JFrame(String T
4、itle):创建一个含有标题的窗口,这个标题是由参数title指定的。当一个JFrame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible()或者show()方法来显示窗口。,10,JFrame,JFrame是最简单的swing顶层容器,它含有一个内容框架(Content Pane)用来容纳所有的组件,关系见下图:,JFrame,内容框架,菜单组件,JLabel,JButton,顶层容器,11,第一个GUI实例,import javax.swing.*;public class FirstGUI public static void main(Strin
5、g args)JFrame f=new JFrame();/创建一个框架对象f f.setTitle(FirstFrame);/设定框架的标题 f.setSize(250,100);/设定框架的大小 f.show();/显示框架,12,补充:,setBounds(x,y,w,h)方法设定窗口的大小,及所在屏幕的位置。setLocation(x,y)设定所在屏幕位置。setSize(w,h)设定窗口的大小。setBackground(颜色参数)改变框架背景色。setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE)关闭窗口。添加组件用:Jframe对象名.ge
6、tContentPane().add(组件对象名);,13,容器-面板,面板不是一个单独的窗口,它只是包含在窗口中的一个区域。面板是可以将许多组件组合起来的一种容器。最简单的创建面板的方式就是通过面板的构造函数 JPanel()来进行。必须将面板添加到顶层容器JFrame中。,14,(实例)分为两步:(1)将一个标签和一个文本框添加到面板中。(2)再将面板添加到框架中,然后显示框架。,15,提示:标签,JLabel 对象名=new Jlabel();JLabel 对象名=new Jlabel(icon);JLabel 对象名=new Jlabel(icon,JLabel.CENTER);JLa
7、bel 对象名=new Jlabel(String s,icon,JLabel.CENTER);JLabel 对象名=new Jlabel(String s);JLabel 对象名=new Jlabel(String s,JLabel.CENTER);ImageIcon 对象名=new ImageIcon(图片文件名);,对齐方式,16,提示:文本框,JTextField txta=new JTextField();txta.setText(“文本框内容”);JTextField txta=new JTextField(20);JTextField txta=new JTextField(“a
8、bc”,20);String s=txta.getText();txta.setEditable(false/true);/是否可以编辑txta.requestFocus();/获取焦点txta.selectAll();/选中全部内容,17,使用容器示例,import java.awt.*;import javax.swing.*;public class FirstPanel public static void main(String args)JLabel labOne=new JLabel(这是标签);JTextField txtOne=new JTextField(这是文本框);JP
9、anel p=new JPanel();/生成面板对象/将标签和文本框添加到面板容器中 p.add(labOne);p.add(txtOne);/给面板增加一个边框/Border border=BorderFactory.createEtchedBorder();/p.setBorder(border);,使用GUI组件必须导入该包,将组件添加到面板中,18,JFrame f=new JFrame();/创建一个框架对象f f.setSize(300,300);/设定框架的大小/取得框架的内容窗格 Container contentPane=f.getContentPane();/将面板添加到
10、框架的内容窗格中 contentPane.add(p);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.show();/显示框架,将面板添加到框架窗体中,19,表面重绘,paintComponent(Graphics g)方法。repaint()方法。在覆盖组件的paintComponent(Graphics g)方法时,记得首先调用super.paintComponent(g)。,20,绘图部分:,g.fillRect(x,y,w,h);/矩形,当w=h时,为正方形;g.drawRoundRect(x,y,w,h,acrwidth,arc
11、height)圆矩形;clearRect(x,y,w,h)表示清除矩形;g.drawOval(x,y,w,h);/椭圆,当w=h时,为圆g.drawLine(x1,y1,x2,y2);/两点确定一直线g.drawArc(x,y,w,h,startAngle,arcAngle)/其中x,y表示椭圆外切矩形左上角坐标,中间w,h表示弧形宽度和高度,最后两个参数表示弧形起始角度和旋转角度。,21,实例效果(思考题):,22,改变应用程序的观感,UIManager.setLookAndFeel(String lnfName)方法。/设定观感SwingUtilities.updateComponentT
12、reeUI()方法。/更新例如,要设定Windows的观感:tryString lnfName=com.sun.java.swing.plaf.windows.WindowsLookAndFeel;UIManager.setLookAndFeel(lnfName);catch(Exception e)e.printStackTrace();,23,AWT事件,不仅是JButton类型的事件源能产生动作事件(ActionEvent),也有其它类型的事件源可以产生动作事件。例如点击菜单(JMenuItem)选项、双击列表框中(JList)的选项以及在文本输入框(JTextField、JPasswo
13、rdField)中按下回车键等,也会产生动作事件。本小节介绍了三种(独立的类、内部类以及匿名内部类,具体内容参见教材)方式来注册事件侦听器,希望读者都能够掌握。因为,这三种方式都可能在别的程序员编写的程序中出现,而你很可能需要阅读这样的程序。,24,动作事件ActionEvent,需要使用一个接口ActionListener,其中仅有唯一的一个方法actionPerformed(ActionEvent e),25,改变程序外观的三种方法,另外定义一个类(麻烦)传统继承实现法匿名内部类(简化,且内部不受外部干扰),26,实例效果(对两个数字的求和运算):,思考题:仿照该实例,完成两个数字的加减乘
14、除运算。,27,使用事件适配器,通常,客户类(clients of class)通过类的接口访问他提供的服务。有时,现有的类(existing class)能提供客户类的功能需要,不过他所提供的接口不一定是客户类所期望的。这是由于现有的接口太周详或缺乏周详或接口的名称和客户类所查找的不同 等诸多不同原因导致的。,28,如果你只有一个两脚的电源而你的电脑需要三项插头呢?,适配器,29,例一 键盘按钮的显示,将一个标签加入一个面板按下按钮,标签字体根据按键来更替,30,提示1使用接口KeyListener,31,提示2使用适配器,32,AWT事件继承关系,33,AWT事件模型中提供的侦听器接口及对
15、应的适配器类,34,AWT组件,组件指可以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小。AWT支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。高级组件包括滚动条、滚动窗格和对话框。向窗口加入一个组件:首先生成所需组件的实例,然后调用add()方法,此方法是在Container类中定义的。,35,不同组件,标签,文本域,文本区,按钮,36,标签,可以通过以下任一构造函数来创建:JLabel():新建一个空标签JLabel(String labeltext):新建一个包含给定文本的标签JLabel(String labeltext,int alignment):新建一
16、个包含给定对齐方式的标签,对齐方式可以为 Label.LEFT、Label.RIGHT 或 Label.CENTER,通常用来指明项目的用途标签不可以被用户编辑,37,文本域,可以通过以下任一构造函数来创建:JTextField():新建一个文本框 JTextField(int columns):新建一个包含给定列数的文本框JTextField(String s):新建一个包含给定字符串的文本框JTextField(String s,int columns):新建一个包含给定字符串和列数的文本框,一种用来输入文本的GUI组件只能接受一行输入,38,标签和文本域使用示例,import java.
17、awt.*;Import javax.swing.*;class TextLabelDemo extends JFrame JLabel lblName=new JLabel(“名称:”);JTextField txtName=new JTextField(20);public TextLabelDemo(String title)super(title);setLayout(new FlowLayout();add(lblName);add(txtName);public static void main(String args)TextLabelDemo t=new TextLabelDe
18、mo(正在测试组件!);t.setSize(300,200);t.show();,新建一个标签,新建一个文本域,添加到窗口,39,文本区,可以通过以下构造函数来创建:JTextArea():新建一个TextAreaJTextArea(int rows,int cols):新建一个包含给定行数和列数的TextAreaJTextArea(String text,int rows,int cols):新建一个包含给定字符串、行数和列数的TextArea,要接受输入多行文本时使用可以包括滚动条,JTextArea txtComment=new JTextArea();add(txtComment);,
19、40,实例效果:,41,实现代码:,42,改进效果:,43,文本区常用方法提示:(1)自动换行:setLineWrap();(2)设置滚动条:JScrollPane cp=new JScollPane(textarea);(3)滚动条显示方式参看P137.,44,实现代码:,45,按钮,可以使用以下任一构造函数来创建按钮:JButton():新建一个空的按钮JButton(String text):新建一个包含给定字符串的按钮,按钮是任何GUI都不可或缺的组件用来捕捉用户操作的最为简便的方式,.JButton btnOk=new JButton(确定!);JButton btnCancel=n
20、ew JButton(取消!);add(btnOk);add(btnCancel);.,46,按钮,文本框,密码框和文本区综合实例效果:,第一步:输入正确的用户名和密码第二步:若输入正确,单击“登录”,登陆界面消失,组件练习界面打开,同时文本区为可编辑状态.,47,单选按钮,可以通过成组(Group)生成一系列互斥的单选按钮(JRadioButton)功能。在一组单选按钮中只能选择一个按钮。首先创建一个 ButtonGroup 对象。ButtonGroup group=new ButtonGroup();然后再创建各单选按钮。JRadioButton male=new JRadioButton
21、(男“);JRadioButton female=new JRadioButton(“女“);Group.add(male);group.add(female);JPanelx.add(male);JPanelx.add(female);,48,单选按钮事件(ActionEvent),(1)实现接口ActionListener(2)接口中有唯一的方法public void actionPerformed(ActionEvent e),49,实例效果:,50,实现代码:,51,52,复选框,可以使用以下任一构造函数来创建复选框:-JCheckBox():创建一个空的复选框,且未被选中-JChec
22、kBox(String text):创建一个用给定字符串作为标签的复选框,且未被选中-JCheckBox(String text,Boolean on):创建一个标签由参数text指定的复选框,允许通过参数on设定复选框的初始状态。,用于多选项的用户输入,用户可以通过单击复选框来选定或取消选定某选项。,53,复选框和文本区使用示例,54,实现代码:,import java.awt.*;import javax.swing.*;import java.awt.event.*;class myframe extends JFrame implements ItemListenerJTextArea
23、 ta=new JTextArea(40,30);JCheckBox a=new JCheckBox(音乐);JCheckBox b=new JCheckBox(篮球);JCheckBox c=new JCheckBox(上网);StringBuffer str;,引入图形图像及事件包,声明文本区及复选框,55,public myframe()setTitle(个人爱好);JPanel p=new JPanel();p.setLayout(new GridLayout(4,1);/p.setBorder(BorderFactory.createTitleBorder(个人爱好);p.setBa
24、ckground(Color.cyan);p.add(a);p.add(b);p.add(c);a.addItemListener(this);b.addItemListener(this);c.addItemListener(this);ta.setLineWrap(true);,设置面板布局,为复选框增加监听器,56,57,组合框,用JComboBox 类可以创建一个选择框JComboBox moviestars=new JComboBox();通过 addItem()方法可以添加项目moviestars.addItem(安东尼奥.班德拉斯);moviestars.addItem(莱昂纳多
25、.迪卡普尼奥);moviestars.addItem(桑德.布洛克);moviestars.addItem(休.葛兰特);moviestars.addItem(朱莉亚.罗萡茨);,用来向用户显示一个选择列表,58,实例演示:,59,实现代码:,60,61,列表框,用JList 类可以创建一个选择框 DefaultListModel a=new DefaultListModel();JList aihao=new JList(a);通过 addElement()方法可以添加项目a.addElement(“音乐);a.addElement(“游戏);a.addElement(“上网);a.addE
26、lement(“篮球);单选,多选模式见教材P144.,用来向用户显示一个选择列表,62,提示:,事件ListSelectionEvent;获取选中选项值:getSelectedValue();接口ListSelectionListener;接口中唯一的方法:public void valueChanged(ListSelectionEvent e)该接口在javax.swing.event.*;,63,实例演示,64,实现代码:,65,66,布局管理器,用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布
27、局管理器。AWT提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现 LayoutManager接口。,67,布局类型,Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)GridBagLayout(网格包布局)CardLayout(卡片布局),68,布局类型的选用,每个布局管理器都有自己特定的用途。要按行和列显示几个同样大小的组件,GridLayout 会比较合要在尽可能大的空间里显示一个组件,就要选择 BorderLayout 或 GridBagLayout,69,如何设置布局,每个容器(Con
28、tainer对象)都有一个与它相关的缺省的布局管理器。Panel,Applet 的缺省布局是 FlowLayout Frame的缺省布局是BorderLayout在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。可以通过setLayout()方法为容器设置新的布局。,70,FlowLayout,FlowLayout的构造函数有:FlowLayout():生成一个默认的流式布局FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离,Ap
29、plet和面板的缺省布局组件从左上角开始按从左到右、从上到下的方式排列,FlowLayout mylayout=new FlowLayout();FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器设置新布局,71,实例演示:,72,73,BorderLayout 2-1,下面是BorderLayout所定义的构造函数:-BorderLayout():生成默认的边界布局-BorderLayout(int horz,int vert):可以设定组件间的水平和垂直距离,窗口、框架和对话框等的缺省布
30、局组件可被置于容器的北、南、东、西或中间位置,74,BorderLayout 2-2,BorderLayout 类定义了几个常量值以指定相应区域:BorderLayout.NORTH 对应容器的顶部BorderLayout.EAST 对应容器的右部BorderLayout.SOUTH 对应容器的底部BorderLayout.WEST 对应容器的左部BorderLayout.CENTER 对应容器的中部加入组件方法:void add(Component Obj,int region);,.setLayout(new BorderLayout();Button btnEast=new Button
31、(东);Button btnWest=new Button(西);Button btnNorth=new Button(北);Button btnSouth=new Button(南);Button btnCenter=new Button(中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);.,不指定方向参数时,系统
32、默认为center,75,GridLayout,GridLayout的构造函数如下所示:-GridLayout():生成一个单列的网格布局-GridLayout(int row,int col):生成一个设定行数和列数的网格布局-GridLayout(int row,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔,用于将容器区域划分为一个矩形网格组件按行和列排列,.Button btn;/声明按钮数组 String str=1,2,3,4,5,6,7,8,9;setLayout(new GridLayout(3,3);btn=new Buttonstr.
33、length;/创建按钮数组 for(int i=0;istr.length;i+)btni=new Button(stri);add(btni);,76,GridBagLayout,通过使用以下语法容器可获得 GridBagLayout:GridBagLayout gb=new GridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布局等信息。GridBagConstraints 类中包含 GridBagLayout 类用来定位及调整组件大小所需的全部信息。,组件大小不必相同组件按行和列排列放置顺序不一定为从左至右和由上至
34、下,77,GridBagConstraints 类 2-1,成员变量列表:gridx,gridy:指定组件放置于哪个单元中gridwidth,gridheight:指定组件将占用多少行和多少列weightx,weighty:指定在一个 GridBagLayout 中应如何分配空间,这些变量的缺省值为 0ipadx,ipady:指定组件的最小高度和宽度,78,成员变量列表:fill:指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONEanchor:指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstra
35、ints.CENTER,GridBagConstraints 类2-2,79,CardLayout,可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个 Panel 对象。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。,80,总结 3-1,抽象窗口工具包(AWT)是一组类,它允许创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。容器指可以存放组件的区域,两种常用容器类:框架(Frame类)和面板(Panel类)。框架是一个单独的窗口,而面板只是包含在窗口中的一个区域。AWT支持下列类型的组件:标签、文本域
36、、文本区、按钮、复选框、列表框等。,81,总结 3-2,布局管理器类提供控制 GUI 组件物理布局的一种方式。以下是几种不同类型的布局:FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout布局可通过 setLayout()方法进行设置。,82,总结 3-3,FlowLayout 是 Applet 和 面板的缺省布局管理器。组件从左上角到右下角进行排列。BorderLayout 按北、南、东、西、中的不同区域划分将组件排列于容器中。GridLayout 将组件按行和列排列。所有组件大小相同。GridBagLayout 能将组件放置在最精确
37、的位置。各组件的大小可以不同。CardLayout可存储几个不同的布局管理器,83,84,JMenuBar,JMenuItem,JRadioButtonMenuItem,JMenu,JMenu,JCheckBoxMenuItem,85,86,设置菜单栏,JMenuBar mb=new JMenuBar();JMenu file=new JMenu(“文件(F)”);JMenu edit=new JMenu(“编辑(E)”);JMenu geshi=new JMenu(“格式(G)”);mb.add(file);mb.add(edit);mb.add(geshi);f.setJMenuBar(m
38、b);,87,88,插入菜单选项,JMenu geshi=new JMenu(“格式(G);JMenuItem ziti=new JMenuItem(“字体”);JMenuItem wrap=new JMenuItem(“自动换行”);geshi.add(ziti);geshi.add(wrap);,89,级联菜单,90,单选菜单,JRadioButtonMenuItem putongshitu=new JRadioButtonMenuItem(普通视图);JRadioButtonMenuItem yemianshitu=new JRadioButtonMenuItem(页面视图);,Butt
39、onGroup group=new ButtonGroup();Group.add(putongshitu);Group.add(yemianshitu);edit.add(putongshitu);edit.add(yemianshitu);,91,插入分割线,JMenu a=new JMenu(“Book”);JMenuItem b=new JMenuItem(“english”);JMenuItem c=new JMenuItem(“math”);a.add(b);a.addSeparator();/设置分割线 a.add(c);b.addActionListener();/为菜单选项增
40、加监听器,92,93,弹出式菜单,弹出式菜单(JPopupMenu)是一种特殊的菜单,和普通菜单的区别在于其不固定在菜单栏中,而是可以四处浮动的。下面的语句创建了一个弹出式菜单:JPopupMenu pm=new JPopupMenu();与向菜单中添加菜单选项、分隔线或是子菜单一样,使用同样的方法向弹出式菜单中添加内容。,94,用户可以通过点击某个特殊的鼠标键(称为触发器)来触发弹出式菜单。例如,在Windows操作系统上,一般是鼠标右键。为此,应用程序中应该监听弹出式菜单的父组件的鼠标事件:当有鼠标事件发生时,使用isPopupTrigger()方法来判断是否为弹出式菜单的触发器;,95,
41、如在文本区中激活弹出菜单:,96,工具条 工具条通常被置于布局为BorderLayout的容器中。在例6.4.8中,工具条被置于布局为BorderLayout的一个面板中。工具条还有一个特点:可以被拖动到所在容器其它边界(图6.4.15),甚至脱离其所在的容器(图6.4.16)。,97,工具条,生成一个工具条对象,可以使用语句:JToolBar toolbar=new JToolBar();还可以在生成工具条时,指明工具条的标题。这样,当工具条脱离所在容器时,可以在自己的标题栏显示标题(图6.4.16):JToolBar toolbar=new JToolBar(颜色工具条);向工具条中添加组
42、件,使用add方法:toolbar.add(btnBlue);toolbar.add(btnYellow);,98,缺省情况下,组件是按照水平方式逐个添加入工具条的,也可以在生成工具条时指明以垂直方式来添加组件:JToolBar toolbar=new JToolBar(SwingConstants.VERTICAL);如果希望工具条不能移动,可以使用setFloatable方法来设置:toolbar.setFloatable(false);当工具条中的按钮上只显示图标时,用户可能不能确切知道各个按钮的具体含义。可以使用工具提示解决这个问题:btnYellow.setToolTipText(面
43、板置为黄色);,99,实例演示,100,对话框,对话框是用户和应用程序进行交互(对话)的一个桥梁:对话框可以用于收集用户的输入数据传递给应用程序,或是显示应用程序的运行信息给用户。对话框分为模式(modal)和非模式两种。模式对话框处于可见状态时,用户将不能与应用程序的其它窗口进行交互,而非模式对话框则没有此限制。Java中提供了一个类JOptionPane用于创建简单的模式对话框,如果希望创建非模式对话框或是自定义对话框可以使用JDialog。,101,JOptionPane类中提供了4种静态方法,用以显示4种常用的对话框:showMessageDialog 消息对话框 showInputD
44、ialog 输入对话框 showConfirmDialog 确认对话框 showOptionDialog 选项对话框 通过观察右侧的对话框可以发现,该对话框主要由如下几个部分构成:图标、消息以及按钮。,102,先来看一下图标,系统本身提供了如下四种图标:类JOptionPane中定义了如下五个常量:JOptionPane.QUESTION_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.ERROR_MESSAGE JOptionPane.PLAIN_MESSAGE/不使用图标 前四个
45、常量对应着四个图标,第五个常量表示不使用图标。开发人员可以使用这些常量来指定对话框中显示的图标。当然,对话框也提供了方法使得开发人员可以使用自己的图标。,103,表格,JTable(Objece data,Object columnNames);JTable(Vector data,Vector columnNames);,104,实例演示:,105,实例效果:,106,自测题,1.哪一种布局管理器能在换行时从左至右、然后从上到下居中排列组件?A.BorderLayout B.FlowLayout C.GridLayout D.CardLayout E.GridBagLayout2.当组件被放
46、置在BorderLayout的哪个区域时,可水平调整组件大小?北或南 B.东或西 C.中部 D.北、南或中部 E.任何区域3.执行以下代码后,描述与显示外观最接近的选项一个?Import java.awt.*;Public class MyClass extends Frame public static void main(String args)MyClass cl=new MyClass();MyClass()Panel p=new Panel();p.add(new Button(“1”);p.add(new Button(“2”);p.add(new Button(“3”);add(p,BorderLayout.NORTH);setLayout(new FlowLayout();setSize(300,300);setVisible(true);按钮将沿窗体的底部从左至右排列 按钮将沿窗体的顶部从左至右排列,107,自测题,C.按钮不会显示D.只有按钮3将显示,并占用了窗体的全部空间4._类可用于输入多行信息TextArea B.TextField C.List D.Comment5.swing是_的一部分AFC B.JFC C.BFC D.none of about-1、写一个练习使用单选、多选按钮的窗口应用程序,