您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第6章2 Java用户界面技术1107
第10课用户界面设计参见《Java语言与面向对象程序设计》的第7章,第8章8.3节AWT容器容器Container能够用来存放别的组件。有两种类型的容器:Window和Panel。Frame容器Window是能独立存在的容器,它有一个子类Frame。Frame有一个构造方法Frame(Stringtitle)你可以通过add()方法,在Frame中加入其他的组件。Frame被创建后,它是不可见的.参见FrameShower.javaFrameShower.javapackagegui;importjava.awt.*;publicclassFrameShower{publicstaticvoidmain(Stringargs[]){Framef=newFrame(hello);f.add(newButton(PressMe));f.setSize(100,100);f.setVisible(true);}}Panel容器Panel只能存在于其他的容器(Window或其子类)中.通过Panel的默认构造方法Panel()可以创建一个Panel。参见MyFrame.javaMyFrame.javapackagegui;importjava.awt.*;publicclassMyFrameextendsFrame{Panelpanel=newPanel();Buttonbutton=newButton(pressme);publicMyFrame(Stringtitle){super(title);panel.add(button);panel.setBackground(Color.yellow);add(panel);setBackground(Color.blue);setSize(500,500);setVisible(true);}publicstaticvoidmain(Stringargs[]){MyFramef=newMyFrame(hello);}}布局管理器一.取消布局管理器setLayout(null)二.默认布局管理器Window,Frame和Dialog的默认布局管理器是BorderLayoutPanel和Applet的默认布局管理器是FlowLayout。取消布局管理器publicMyFrame(Stringtitle){super(title);panel.setLayout(null);panel.setSize(200,200);panel.setLocation(50,50);button.setSize(80,50);button.setLocation(80,80);panel.add(button);panel.setBackground(Color.yellow);setLayout(null);add(panel);setBackground(Color.blue);setSize(500,500);setVisible(true);}yx布局管理器布局管理器分为5种:-FlowLayout流式布局管理器-BorderLayout边界布局管理器-GridLayout网格布局管理器-CardLayout卡片布局管理器-GridBagLayout网格包布局管理器布局管理器练习运行MyFlow.java运行BorderLayoutTester.java运行GridEx.java运行CardLayoutTester.java运行GridBagEx1.java改变容器中组件的布局,观看显示效果FlowLayoutpublicclassMyFlow{privateFramef;privateButtonbutton1,button2,button3;publicstaticvoidmain(Stringargs[]){MyFlowmflow=newMyFlow();mflow.go();}publicvoidgo(){f=newFrame(FlowLayout);f.setLayout(newFlowLayout());button1=newButton(Ok);button2=newButton(Open);button3=newButton(Close);f.add(button1);f.add(button2);f.add(button3);f.setSize(600,600);f.setVisible(true);}}BorderLayoutpublicclassBorderLayoutTester{privateFramef;privateButtonbn,bs,bw,be,bc;publicstaticvoidmain(Stringargs[]){BorderLayoutTesterguiWindow2=newBorderLayoutTester();guiWindow2.go();}publicvoidgo(){f=newFrame(BorderLayout);//f.setLayout(newBorderLayout());bn=newButton(B1);bs=newButton(B2);be=newButton(B3);bw=newButton(B4);bc=newButton(B5);f.add(bn,BorderLayout.NORTH);f.add(bs,BorderLayout.SOUTH);f.add(be,BorderLayout.EAST);f.add(bw,BorderLayout.WEST);f.add(bc,BorderLayout.CENTER);f.add(newButton(hello));f.pack();f.setVisible(true);}}GridLayoutpublicclassGridEx{privateFramef;privateButtonb1,b2,b3,b4,b5,b6;publicstaticvoidmain(Stringargs[]){GridExgrid=newGridEx();grid.go();}publicvoidgo(){f=newFrame(Gridexample);f.setLayout(newGridLayout(3,2));b1=newButton(1);b2=newButton(2);b3=newButton(3);b4=newButton(4);b5=newButton(5);b6=newButton(6);f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);f.add(b6);f.setSize(500,500);f.setVisible(true);}}CardLayoutpublicclassCardLayoutTester{publicstaticvoidmain(Stringargs[]){Panelp1,p2,p3;Framef=newFrame(CardTest);CardLayoutmyCard=newCardLayout();f.setLayout(myCard);p1=newPanel();p2=newPanel();p3=newPanel();f.setBackground(Color.white);p1.setBackground(Color.black);p2.setBackground(Color.blue);p3.setBackground(Color.red);f.add(p1,First);f.add(p2,Second);f.add(p3,Third);myCard.show(f,Second);f.setSize(200,200);f.setVisible(true);}}创建面板及复杂布局参见ExGui3.java创建面板及复杂布局参见ExGui4.java事件处理每一个可以触发事件的组件被当作事件源.每一种事件都对应专门的监听者。监听者用来接收和处理这种事件。一个事件源可以触发多种事件,如果它注册了某种事件对应的监听者,那么这种事件就会被接收和处理。这种模式被称为委托模型。事件处理的软件实现事件类(XXXEvent)事件监听接口(XXXListener)组件的注册监听接口方法(addXXXListener()方法)事件处理1.用内部类实现监听接口参看EventTester1.java2.将容器类实现监听接口参看EventTester2.java3.定义专门的外部类实现监听接口参看EventTester3.java4.采用事件适配器参看EventTester4.java5.一个组件注册多个监听者参看EventTester5.java用内部类实现监听接口publicclassEventTester1extendsFrame{staticintcount=1;publicEventTester1(Stringtitle){super(title);}publicstaticvoidmain(Stringargs[]){EventTester1f=newEventTester1(hello);f.setLayout(newFlowLayout());finalButtonb=newButton(1);b.addActionListener(newActionListener(){//declareanInnerclasspublicvoidactionPerformed(ActionEventevt){b.setLabel(newInteger(++count).toString());}});f.add(b);f.setSize(100,100);f.setBackground(Color.blue);f.setVisible(true);}}将容器类实现监听接口publicclassEventTester2extendsFrameimplementsActionListener{intcount=1;Buttonb;publicEventTester2(Stringtitle){super(title);setLayout(newFlowLayout());b=newButton(1);b.addActionListener(this);//SampleitselfisanActionListeneradd(b);setSize(100,100);setBackground(Color.blue);setVisible(true);}publicstaticvoidmain(Stringargs[]){EventTester2f=newEventTester2(hello);}publicvoidactionPerformed(ActionEventevt){b.setLabel(newInteger(++count).toString());}}定义专门的外部类实现监听接口publicclassEventTester3extendsFrame{Buttonb;Buttonb1;publicEventTester3(Stringtitle){super(title);setLayout(newFlowLayout());b=newButton(1);b.addActionListener(newMyListener(1));add(b);b1=newButton(notregistred);add(b1);setSize(100,100);setBackground(Color.blue);setVisible(true);}publicstaticvoidmain(Stringargs[]){EventTester3f=newEventTester3(hello);}}classMyListenerimplementsActionListener{intcou
本文标题:第6章2 Java用户界面技术1107
链接地址:https://www.777doc.com/doc-3402445 .html