Download presentation
Presentation is loading. Please wait.
Published byVirgil Bridges Modified over 9 years ago
1
Java the UML Way http://www.tisip.no/JavaTheUmlWay/ versjon 2002-04-17 Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15 Creating User Interfaces Menuespage 2-3 Tollbarspage 4 Dialog windows, introduction page 5-9 An ordinary OK-Cancel dialogpage 10 Trasferring data between parent window and dialog windowpage 11-12 The renovation case, a new GUIpage 13 GridBagLayout as layout managerpage 14-16 Is it possible to control the size of the components?page 17 The GUI component JTablepage 18-19 The renovation case GUIpage 20
2
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 2 Menus in General You’ll find MenuLookDemo via JMenu(How to use Menus) in the online API documentation.
3
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 3 Menus in this book class WindowWithMenu extends JFrame { private Container guiContainer; public WindowWithMenu() { setTitle("MenuTest"); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); guiContainer = getContentPane(); MenuListener theListener = new MenuListener(); JMenu theMenu = new JMenu("Color"); JMenuItem menuItem = new JMenuItem("Yellow"); theMenu.add(menuItem); menuItem.addActionListener(theListener); //.. the same for red and blue… JMenuBar menuBar = new JMenuBar(); menuBar.add(theMenu); setJMenuBar(menuBar); } private class MenuListener implements ActionListener { public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if (command.equals("Yellow")) guiContainer.setBackground(Color.yellow); else if (command.equals("Red")) guiContainer.setBackground(Color.red); else guiContainer.setBackground(Color.blue); } A menu choice generates an ActionEvent. Solve problem 1, page 457. JMenuBar JMenu JMenuItem
4
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 4 Toolbars class WindowWithToolbar extends JFrame { private Container guiContainer; private JButton yellowButton; private JButton redButton; private JButton blueButton; public WindowWithToolbar(){ setTitle("Toolbar Test"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); guiContainer = getContentPane(); ButtonListener theListener = new ButtonListener(); JToolBar toolbar = new JToolBar(); Icon icon = new ImageIcon("yellow.gif"); yellowButton = new JButton(icon); yellowButton.addActionListener(theListener); toolbar.add(yellowButton); // ….the same for red and blue… guiContainer.add(toolbar, BorderLayout.NORTH); } private class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { JButton button = (JButton) event.getSource(); if (button == yellowButton) guiContainer.setBackground(Color.yellow); else if (button == redButton) guiContainer.setBackground(Color.red); else guiContainer.setBackground(Color.blue); } JToolBar JButton The toolbar is dragged away from its ordinary place, becoming a window of its own The toolbar in its ordinary place
5
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 5 Dialog Windows, an Example The new name is entered and sent to the primary window The name is edited, and the result is sent to the primary window
6
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 6 Dialog Windows A dialog window is a secondary window, that means it should always be connected to a parent window. A modal dialog window prevents the user access to other windows as long as this window is open. A nonmodal window is more practical to the user, but it demands more of the programmer because more than one window have to be kept updated synchronously. In this book we only look at modal dialog windows.
7
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 7 The Most Basic Dialog Window showDialog() 1 2
8
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 8 The Message Exchange Between the Parent Window and the Dialog Window
9
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 9 Summary: Making a Modal Dialog Window 1.A dialog window is always a subclass of JDialog. What we have to provide is a constructor that calls one of the JDialog’s constructors with modal parameter. If we do not do this, the constructor with empty parameter list will be used. And that constructor creates a nonmodal dialog window. The argument to the modal parameter has to be true, for example: super(parent, "Minidialog", true); 2.Each individual dialog has a method with the name showDialog() (or something similar). We find the call setVisible(true) inside the method. 3.All activity in the dialog has to end with the call setVisible(false). With this, the dialog is closed, and the program then goes on to the first statement after setVisible(true). 4.Let the dialog window be an instance variable in the parent window. Show program listing 15.3, pp. 464-466. Solve the problem, page 475.
10
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 10 An Ordinary OK Cancel Dialog ”OK” means that what the user has done in the window should apply. ”Cancel” means that what the user has done in the window should not apply. We make a class describing a dialog with these two buttons, and then our other dialogs may be subclasses of this class. The class is named MyDialog and put in the myLibrary package. Other functionality: –The class has a method okData(). A subclass may have its own version of this method. If the user presses OK, it will not be accepted unless okData() returns true. –If the user tries to close the window by pressing in the upper right corner, she will get a question ”Do you want input data to be saved?”. If the user answers yes, the window is closed only if okData() returns true. –Acceleration keys are linked to the buttons. The Enter key is linked to the OK-button (requires the OK button having focus). The Escape key is linked to the Cancel button (independent of focus). Show program listing 15.4, pp. 468-470.
11
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 11 Transferring Data Between a Parent Window and a Dialog Window Johnson, John Johnson, John Peter
12
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 12 Testing PersonDialog Show program listing 15.5, pp. 471-475. ParentWindow extends JFrame PersonDialog extends MyDialog JOptionPane, this box is displayed if user clicks the X in the upper right corner
13
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 13 The Last Version of the Renovation Case - the Classes From Chapter 12 With New GUI JTable JList
14
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 14 GridBagLayout as Layout Manager GridBagLayout is the most general of all the layout managers, and often the only applicable. It’s not suited for the trial end error method. To use it you have to do a careful planning. Use pen and paper! The manager has many parameters, and an error may give unpredictable results. First, create a sketch of the window: –Divide the window into rectangular cells by using vertical and horizontal lines. –Not more than one GUI component in every cell. –A GUI component may cover more than one cell. This sketch makes it possible to state the requirements of every component.
15
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 15 An Example toolbar table on the left list on the right backgr. text at the ottom text box at the bottom gridx00312 gridy01122 gridwidth43111 gridheight11111 fillNONEBOTH NONEHORIZONTAL anchorWESTCENTER EASTWEST
16
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 16 The Example, cont. Container guiContainer = getContentPane(); guiContainer.setLayout(new GridBagLayout()); // don’t forget this! GridBagConstraints constraints = new GridBagConstraints(); /* The following variables are fixed for all components */ constraints.insets = new Insets(5, 5, 5, 5); // space around and between the components constraints.weightx = 0.5; constraints.weighty = 0.5; /* Then each component has to be handled according to the table */ /* The Toolbar */ constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 4; constraints.gridheight = 1; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.WEST; guiContainer.add(toolbar, constraints); //..and so on, for all the components
17
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 17 Is It Possible to Control the Size of the GUI Components? What about the setSize() method in the Component class? –It’s inherited by all the GUI components. –We’ve used it to set the size of windows. –For other components, the setSize() method is only effective if we don’t use any layout manager at all. Then the components are laid out according to given pixel values. What about the setMaximumSize(), setMinimumSize(), and setPreferredSize() methods in the JComponent class? –They are all inherited by every Swing component. –BorderLayout and GridLayout do not consider any of the wishes set up in these methods. –FlowLayout and GridBagLayout consider a component’s ”preferred size”. –BoxLayout (see the online API documentation) considers all these wishes. –All these methods take as argument an instance of the Dimension class. This class has the following constructor: Dimension(int width, int height). –An example: list.setPreferredSize(new Dimension(500, 300))
18
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 18 The GUI Component JTable A class with a lot of possibilities. We limit ourselves to the following: –The table has a fixed number of columns with fixed column names. –The user can adjust the width of the individual columns in the table. This results in the other columns becoming narrower. –The user can’t adjust the size of the table (the overall width and height of the table). –The user can’t change the data in the table. –The program can insert and delete rows in the table. In order to change the data, the program can delete a row and insert a new row in its place. –The user can select individual rows in the table. The program determines whether or not multiple rows can be selected, just as with lists. –The program handles the selection by having the user push a pushbutton, not by listening to row selections.
19
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 19 The ”Data Model” Behind If the contents of the table are to be changed, we have to update the ”data model” in the same way as we did for lists. –Repetition: DefaulListModel data = new DefaultlistModel(); JList list = new JList(data); data.add(object); // the toString() method is used when presenting the data For tables, we use the DefaultTableModel with a little correction: –The default model allows the user to edit the cells in the table; our programs do not handle this. –We create a subclass of the DefaultTableModel class where this is prevented: package myLibrary; import javax.swing.table.*; public class MyTableModel extends DefaultTableModel { public MyTableModel(String[] columnNames) { super(columnNames, 0); } public boolean isCellEditable(int row, int column) { return false; }
20
Only to be used in connection with the book "Java the UML Way", by Else Lervik and Vegard B. Havdal. ISBN 0-470-84386-1, John Wiley & Sons Ltd 2002 The Research Foundation TISIP, http://tisip.no/engelsk/ Chapter 15, page 20 GUI For the Renovation Case The file named Dialogs.java: –One dialog window for each of the main objects in our problem: SurfaceDialog, PaintDialog, WallpaperDialog and FlooringDialog. The file named Constants.java: –An interface with named constants used in the different windows. –Examples are commands, menu items, and text field lengths. –Classes which need these constants implements the interface. The file named RenovationChap15.java: –The primary window –main() Show program listings 15.7, 15.8 and 15.9, from page 484 and so on.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.