Odds$and$Ends$Java$UI$pt.$1$COMP$401$Spring$2013$Lecture$20$3/28/2013$One$Observer$for$an$Observable$with$mulHple$observable$events$• Need$a$way$to$disHnguish$calls$to$update()$in$order$to$signal$which$event$triggered$the$call.$• lec20.v1$Observer/Observable$Recap$• Basic$PaOern$– Observable$provides$method$to$register$observers$• add,$remove$• Observers$maintained$in$some$sort$of$collecHon$– Update$method$of$observers$called$when$state$of$Observable$changes.$• Arguments$to$method$provide$reference$to$observable$and$possibly$characterize$the$change$that$occurred$• MulHple$observable$events$– Observable$provides$separate$methods$for$registering$observers$for$each$event.$• Could$also$provide$one$registraHon$method$with$addiHonal$arguments.$– If$you$want$to$support$having$the$same$observer$for$more$than$one$event,$argument$to$update$method$needs$to$disHnguish$which$event$occurred.$A5$CheckLineOfSight$Midterm$2$• Average:$64.5$• StdDev:$13.0$• Min:$31$• Max:$85$• Curve$((RY31)/54)*3.3$+$0.7$Places$the$average$at$2.75$(BY)$0$20$40$60$80$100$120$140$160$180$0$ 20$ 40$ 60$ 80$ 100$Series1$A6$Java$User$Interface$Programming$• AWT$– Original$Java$UI$framework$– Normalized$interface$to$naHve$OS$UI$toolkits$– Advantages$and$Disadvantages$– Packages$start$with$java.awt$• Swing$– Pure$Java$– More$sophisHcated$components$– More$easily$extended$and$customized$– Packages$start$with$javax.swing$• Class$names$generally$start$with$“J”$COMP$401$::$Spring$2012$ 7$Hello,$World$• lec20.v2$COMP$401$::$Spring$2012$ 8$Hello,$World$• JFrame$$– Top$level$window$– setTitle()$:$text$in$window$Htle$– setDefaultCloseOperaHon()$• What$happens$when$window$is$closed.$COMP$401$::$Spring$2012$ 9$JFrame$main_frame$=$new$JFrame();$main_frame.setTitle("Hello,$World");$main_frame.setDefaultCloseOperaHon(JFrame.EXIT_ON_CLOSE);$Hello,$World$• JPanel$– Generic$container$window.$• Used$to$contain$other$user$interface$elements.$• main_frame.setContentPane(main_panel)$– TopYlevel$windows$have$a$“content$pane”$• Main$area$of$window.$• Other$areas$of$window:$menu$bar,$window$Htle,$etc.$– Replacing$default$content$pane$with$our$Jpanel$• Accept$this$as$cookbook$for$now.$$COMP$401$::$Spring$2012$ 10$JPanel$main_panel$=$new$JPanel();$main_frame.setContentPane(main_panel);$Hello,$World$• Containers$(i.e.,$JPanel)$associated$with$a$“layout”$manager.$– Determines$how$user$interface$elements$are$arranged$within$the$container.$– Different$layout$managers$provide$different$types$and$styles$of$arrangement.$• Some$limit$the$number$and$locaHon$of$component$elements.$• Differ$in$flexibility$and$sophisHcaHon$– BorderLayout$• Allows$5$components$to$be$placed$in$one$of$5$areas:$– NORTH,$SOUTH,$EAST,$WEST,$CENTER$– Center$area$is$given$any$extra$space.$– Areas$not$filled$are$collapsed.$$COMP$401$::$Spring$2012$ 11$main_panel.setLayout(new$BorderLayout());$Hello,$World$• JLabel$– Simple$text$component$– Property$seOers$for$alignment,$color,$etc.$• Colors$in$Java$represented$by$class$java.awt.Color$– Predefined$colors$available$as$class$constants.$– SwingConstants$• Defines$a$number$of$constants$and$enumeraHons$used$as$symbolic$names$for$several$different$methods.$COMP$401$::$Spring$2012$ 12$JLabel$hello_world_label$=$new$JLabel("Hello,$World!");$hello_world_label.setHorizontalAlignment(SwingConstants.CENTER);$hello_world_label.setForeground(Color.BLUE);$hello_world_label.setBackground(Color.YELLOW);$Hello,$World$• Every$user$interface$component$is$“contained”$by$some$parent.$– Here$we$add$the$label$to$the$main_panel.$– Second$argument$to$add$method$depends$on$layout$manager$of$container.$• Different$layout$managers$need/support$different$kinds$of$arguments$in$order$to$specify$where$exactly$newly$added$component$will$go.$COMP$401$::$Spring$2012$ 13$main_panel.add(hello_world_label,$BorderLayout.CENTER);$Hello,$World$• TopYlevel$window$must$be$made$visible.$– UnHl$now,$Java$was$waiHng$unHl$we$had$set$everything$up.$$COMP$401$::$Spring$2012$ 14$main_frame.setVisible(true);$Top$Level$Windows$• JDialog$– Dialog$box$topYlevel$windows.$– Several$types$preYdefined$for$ease$of$use.$• File$choosers,$informaHonal,$input$prompt,$etc.$• JFrame$– Normal$topYlevel$windows$for$UI$• JApplet$– We’ll$be$ignoring$this$for$now.$COMP$401$::$Spring$2012$ 15$JOpHonPane$Examples$• JOpHonPane$provide$quick$and$easy$dialog$boxes.$– showConfirmDialog$• Allows$user$to$confirm$a$choice$with$a$Yes/No/Cancel$response.$– showInputDialog$• Prompts$for$text$input.$– showMessageDialog$• Shows$message,$waits$for$user$to$acknowledge.$• All$of$these$are$“modal”.$– Flow$of$execuHon$is$halted$unHl$dialog$is$dealt$with.$– Method$returns$response$directly.$• lec20.v3$COMP$401$::$Spring$2012$ 16$JFrame$• NonYdialog$topYlevel$window.$– May$or$may$not$have$a$window$bar$• LocaHon$of$which$is$operaHng$system$and$lookYandYfeel$specific$– OperaHon$defined$by$what$is$placed$in$it.$– General$paOern$• Main$method$of$program$sets$up$UI$in$a$JFrame$• JFrame$made$visible.$• Rest$of$program$now$responds$asynchronously$to$user$interface$events.$• Hello,$world$revisited.$COMP$401$::$Spring$2012$ 17$Containment$Hierarchy$• JPanel$used$as$content$pane$for$topYlevel$window$is$root$of$“containment$hierarchy”.$– All$user$interface$elements$must$be$placed$in$a$container$(i.e.,$JPanel).$– Containers$can$be$nested$within$containers$• Groups$UI$elements$together$and$allows$subYlayout.$COMP$401$::$Spring$2012$ 18$Layout$Managers$• BorderLayout$– 5$areas:$NORTH,$EAST,$WEST,$SOUTH,$CENTER$– N/E/W/S$also$known$as:$• PAGE_START,$LINE_START,$LINE_END,$PAGE_END$• BoxLayout$– Stacked$either$horizontally$or$verHcally$• GridLayout$– Equal$sized,$regular$grid.$COMP$401$::$Spring$2012$ 19$Swing$Components$• Text$– JLabel,$JTextField,$JTextArea$• BuOons$– JBuOon,$JCheckBox,$JRadioBuOon,$JT o ggl eBuOon$• Sliders$– JSlider$• Lots$of$others$$COMP$401$::$Spring$2012$ 20$UI$Events$•
View Full Document