Presentation is loading. Please wait.

Presentation is loading. Please wait.

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components.

Similar presentations


Presentation on theme: "Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components."— Presentation transcript:

1 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components

2 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Graphical User Interfaces A Graphical User Interface (GUI) is created with at least three kinds of objects –components –events –listeners A GUI component defines a screen element to display information or allow the user to interact with the program –buttons, text fields, labels, menus, etc. A container is a special component that holds and organizes other components –dialog boxes, applets, frames, panels, etc.

3 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Events An event is an object that represents some activity to which we may want to respond For example, we may want our program to perform some action when the following occurs: –the mouse is moved –a mouse button is clicked –the mouse is dragged –a graphical button is clicked –a keyboard key is pressed –a timer expires Events often correspond to user actions, but not always

4 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Events and Listeners Component This object may generate an event Listener This object waits for and responds to an event Event When an event occurs, the generator calls the appropriate method of the listener, passing an object that describes the event

5 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. User interface events include key presses, mouse moves, button clicks, and so on Most programs don't want to be flooded by boring events A program can indicate that it only cares about certain specific events Event listener: Notified when event happens Belongs to a class that is provided by the application programmer Its methods describe the actions to be taken when an event occurs Event source: Event sources report on events When an event occurs, the event source notifies all event listeners Events, Event Sources, and Event Listeners

6 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Example: Use JButton components for buttons; attach an ActionListener to each button ActionListener interface: public interface ActionListener { void actionPerformed(ActionEvent event); } Need to supply a class whose actionPerformed method contains instructions to be executed when button is clicked event parameter contains details about the event, such as the time at which it occurred Events, Event Sources, and Event Listeners Continued

7 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Construct an object of the listener and add it to the button: ActionListener listener = new ClickListener(); button.addActionListener(listener); Events, Event Sources, and Event Listeners (cont.)

8 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: 04: /** 05: An action listener that prints a message. 06: */ 07: public class ClickListener implements ActionListener 08: { 09: public void actionPerformed(ActionEvent event) 10: { 11: System.out.println("I was clicked."); 12: } 13: } ClickListener.java

9 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionListener; 02: import javax.swing.JButton; 03: import javax.swing.JFrame; 04: 05: /** 06: This program demonstrates how to install an action listener. 07: */ 08: public class ButtonViewer 09: { 10: public static void main(String[] args) 11: { 12: JFrame frame = new JFrame(); 13: JButton button = new JButton("Click me!"); 14: frame.add(button); 15: 16: ActionListener listener = new ClickListener(); 17: button.addActionListener(listener); 18: 19: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 20: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21: frame.setVisible(true); 22: } ButtonViewer.java Continued

10 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 23: 24: private static final int FRAME_WIDTH = 100; 25: private static final int FRAME_HEIGHT = 60; 26: } ButtonViewer.java (cont.) Output:

11 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Which objects are the event source and the event listener in the ButtonViewer program? Answer: The button object is the event source. The listener object is the event listener. Self Check

12 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implement simple listener classes as inner classes like this: JButton button = new JButton("..."); // This inner class is declared in the same method as the button variable class MyListener implements ActionListener {... }; ActionListener listener = new MyListener(); button.addActionListener(listener); This places the trivial listener class exactly where it is needed, without cluttering up the remainder of the project Methods of an inner class can access local variables from surrounding blocks and fields from surrounding classes Using Inner Classes for Listeners

13 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Local variables that are accessed by an inner class method must be declared as final Example: add interest to a bank account whenever a button is clicked: JButton button = new JButton("Add Interest"); final BankAccount account = new BankAccount(INITIAL_BALANCE); // This inner class is declared in the same method as the account // and button variables. class AddInterestListener implements ActionListener { Using Inner Classes for Listeners Continued

14 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. public void actionPerformed(ActionEvent event) { // The listener method accesses the account variable // from the surrounding block double interest = account.getBalance() * INTEREST_RATE / 100; account.deposit(interest); } }; ActionListener listener = new AddInterestListener(); button.addActionListener(listener); Using Inner Classes for Listeners (cont.)

15 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: 06: /** 07: This program demonstrates how an action listener can access 08: a variable from a surrounding block. 09: */ 10: public class InvestmentViewer1 11: { 12: public static void main(String[] args) 13: { 14: JFrame frame = new JFrame(); 15: 16: // The button to trigger the calculation 17: JButton button = new JButton("Add Interest"); 18: frame.add(button); 19: InvestmentViewer1.java Continued

16 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 20: // The application adds interest to this bank account 21: final BankAccount account = new BankAccount(INITIAL_BALANCE); 22: 23: class AddInterestListener implements ActionListener 24: { 25: public void actionPerformed(ActionEvent event) 26: { 27: // The listener method accesses the account variable 28: // from the surrounding block 29: double interest = account.getBalance() 30: * INTEREST_RATE / 100; 31: account.deposit(interest); 32: System.out.println("balance: " + account.getBalance()); 33: } 34: } 35: 36: ActionListener listener = new AddInterestListener(); 37: button.addActionListener(listener); 38: InvestmentViewer1.java (cont.) Continued

17 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Output: balance: 1100.0 balance: 1210.0 balance: 1331.0 balance: 1464.1 39: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 40: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 41: frame.setVisible(true); 42: } 43: 44: private static final double INTEREST_RATE = 10; 45: private static final double INITIAL_BALANCE = 1000; 46: 47: private static final int FRAME_WIDTH = 120; 48: private static final int FRAME_HEIGHT = 60; 49: } InvestmentViewer1.java (cont.)

18 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Example: investment viewer program; whenever button is clicked, interest is added, and new balance is displayed Building Applications with Buttons Continued

19 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Construct an object of the JButton class: JButton button = new JButton("Add Interest"); We need a user interface component that displays a message: JLabel label = new JLabel("balance: " + account.getBalance()); Use a JPanel container to group multiple user interface components together: JPanel panel = new JPanel(); panel.add(button); panel.add(label); frame.add(panel); Building Applications with Buttons (cont.)

20 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Listener class adds interest and displays the new balance: class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) { double interest = account.getBalance() * INTEREST_RATE / 100; account.deposit(interest); label.setText("balance=" + account.getBalance()); } } Add AddInterestListener as inner class so it can have access to surrounding final variables ( account and label ) Building Applications with Buttons

21 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JTextField; 08: 09: /** 10: This program displays the growth of an investment. 11: */ 12: public class InvestmentViewer2 13: { 14: public static void main(String[] args) 15: { 16: JFrame frame = new JFrame(); 17: 18: // The button to trigger the calculation 19: JButton button = new JButton("Add Interest"); InvestmentViewer2.java Continued

22 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 20: 21: // The application adds interest to this bank account 22: final BankAccount account = new BankAccount(INITIAL_BALANCE); 23: 24: // The label for displaying the results 25: final JLabel label = new JLabel( 26: "balance: " + account.getBalance()); 27: 28: // The panel that holds the user interface components 29: JPanel panel = new JPanel(); 30: panel.add(button); 31: panel.add(label); 32: frame.add(panel); 33: 34: class AddInterestListener implements ActionListener 35: { 36: public void actionPerformed(ActionEvent event) 37: { 38: double interest = account.getBalance() 39: * INTEREST_RATE / 100; InvestmentViewer2.java (cont.) Continued

23 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 40: account.deposit(interest); 41: label.setText( 42: "balance: " + account.getBalance()); 43: } 44: } 45: 46: ActionListener listener = new AddInterestListener(); 47: button.addActionListener(listener); 48: 49: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 50: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 51: frame.setVisible(true); 52: } 53: 54: private static final double INTEREST_RATE = 10; 55: private static final double INITIAL_BALANCE = 1000; 56: 57: private static final int FRAME_WIDTH = 400; 58: private static final int FRAME_HEIGHT = 100; 59: } InvestmentViewer2.java (cont.)

24 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use a mouse listener to capture mouse events Implement the MouseListener interface: public interface MouseListener { void mousePressed(MouseEvent event); // Called when a mouse button has been pressed on a component void mouseReleased(MouseEvent event); // Called when a mouse button has been released on a component void mouseClicked(MouseEvent event); // Called when the mouse has been clicked on a component void mouseEntered(MouseEvent event); // Called when the mouse enters a component Mouse Events

25 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. void mouseExited(MouseEvent event); // Called when the mouse exits a component } mousePressed, mouseReleased : called when a mouse button is pressed or released mouseClicked : if button is pressed and released in quick succession, and mouse hasn't moved mouseEntered, mouseExited : mouse has entered or exited the component's area Mouse Events

26 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Add a mouse listener to a component by calling the addMouseListener method: public class MyMouseListener implements MouseListener { // Implements five methods } MouseListener listener = new MyMouseListener(); component.addMouseListener(listener); Sample program: enhance RectangleComponent – when user clicks on rectangle component, move the rectangle Mouse Events

27 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.Graphics; 02: import java.awt.Graphics2D; 03: import java.awt.Rectangle; 04: import javax.swing.JComponent; 05: 06: /** 07: This component displays a rectangle that can be moved. 08: */ 09: public class RectangleComponent extends JComponent 10: { 11: public RectangleComponent() 12: { 13: // The rectangle that the paint method draws 14: box = new Rectangle(BOX_X, BOX_Y, 15: BOX_WIDTH, BOX_HEIGHT); 16: } 17: // override paintComponent of JComponent 18: public void paintComponent(Graphics g) 19: { 20: super.paintComponent(g); 21: Graphics2D g2 = (Graphics2D) g; 22: RectangleComponent.java Continued

28 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 23: g2.draw(box); 24: } 25: 26: /** 27: Moves the rectangle to the given location. 28: @param x the x-position of the new location 29: @param y the y-position of the new location 30: */ 31: public void moveTo(int x, int y) 32: { 33: box.setLocation(x, y); 34: repaint(); 35: } 36: 37: private Rectangle box; 38: 39: private static final int BOX_X = 100; 40: private static final int BOX_Y = 100; 41: private static final int BOX_WIDTH = 20; 42: private static final int BOX_HEIGHT = 30; 43: } RectangleComponent.java (cont.)

29 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Call repaint when you modify the shapes that paintComponent draws box.setLocation(x, y); repaint(); Mouse listener: if the mouse is pressed, listener moves the rectangle to the mouse location class MousePressListener implements MouseListener { public void mousePressed(MouseEvent event) { int x = event.getX(); int y = event.getY(); component.moveTo(x, y); } Mouse Events Continued

30 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. // Do-nothing methods public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {} } All five methods of the interface must be implemented; unused methods can be empty Mouse Events

31 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. RectangleComponentViewer Program Output

32 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.MouseListener; 02: import java.awt.event.MouseEvent; 03: import javax.swing.JFrame; 04: 05: /** 06: This program displays a RectangleComponent. 07: */ 08: public class RectangleComponentViewer 09: { 10: public static void main(String[] args) 11: { 12: final RectangleComponent component = new RectangleComponent(); 13: 14: // Add mouse press listener 15: 16: class MousePressListener implements MouseListener 17: { 18: public void mousePressed(MouseEvent event) 19: { 20: int x = event.getX(); 21: int y = event.getY(); 22: component.moveTo(x, y); 23: } RectangleComponentViewer.java Continued

33 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 24: 25: // Do-nothing methods 26: public void mouseReleased(MouseEvent event) {} 27: public void mouseClicked(MouseEvent event) {} 28: public void mouseEntered(MouseEvent event) {} 29: public void mouseExited(MouseEvent event) {} 30: } 31: 32: MouseListener listener = new MousePressListener(); 33: component.addMouseListener(listener); 34: 35: JFrame frame = new JFrame(); 36: frame.add(component); 37: 38: frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 39: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 40: frame.setVisible(true); 41: } 42: 43: private static final int FRAME_WIDTH = 300; 44: private static final int FRAME_HEIGHT = 400; 45: } RectangleComponentViewer.java (cont.)

34 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Why must the MousePressListener class supply five methods? Answer: It implements the MouseListener interface, which has five methods. Self Check

35 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use inheritance for complex frames to make programs easier to understand Design a subclass of JFrame Store the components as instance fields Initialize them in the constructor of your subclass If initialization code gets complex, simply add some helper methods Using Inheritance to Customize Frames

36 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use JTextField components to provide space for user input final int FIELD_WIDTH = 10; // In characters final JTextField rateField = new JTextField(FIELD_WIDTH); Place a JLabel next to each text field JLabel rateLabel = new JLabel("Interest Rate: "); Processing Text Input Continued

37 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Supply a button that the user can press to indicate that the input is ready for processing Processing Text Input Continued

38 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The button's actionPerformed method reads the user input from the text fields (use getText ) Class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) { double rate = Double.parseDouble(rateField.getText());... } } Processing Text Input (cont.)

39 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import javax.swing.JFrame; 02: 03: /** 04: This program displays the growth of an investment. 05: */ 06: public class InvestmentViewer3 07: { 08: public static void main(String[] args) 09: { 10: JFrame frame = new InvestmentFrame(); 11: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 12: frame.setVisible(true); 13: } 14: } InvestmentViewer3.java

40 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JTextField; 08: 09: /** 10: A frame that shows the growth of an investment with variable interest. 11: */ 12: public class InvestmentFrame extends JFrame 13: { 14: public InvestmentFrame() 15: { 16: account = new BankAccount(INITIAL_BALANCE); 17: 18: // Use instance fields for components 19: resultLabel = new JLabel("balance: " + account.getBalance()); 20: InvestmentFrame.java Continued

41 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 21: // Use helper methods 22: createTextField(); 23: createButton(); 24: createPanel(); 25: 26: setSize(FRAME_WIDTH, FRAME_HEIGHT); 27: } 28: 29: private void createTextField() 30: { 31: rateLabel = new JLabel("Interest Rate: "); 32: 33: final int FIELD_WIDTH = 10; 34: rateField = new JTextField(FIELD_WIDTH); 35: rateField.setText("" + DEFAULT_RATE); 36: } 37: 38: private void createButton() 39: { 40: button = new JButton("Add Interest"); 41: InvestmentFrame.java (cont.) Continued

42 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 42: class AddInterestListener implements ActionListener 43: { 44: public void actionPerformed(ActionEvent event) 45: { 46: double rate = Double.parseDouble( 47: rateField.getText()); 48: double interest = account.getBalance() 49: * rate / 100; 50: account.deposit(interest); 51: resultLabel.setText( 52: "balance: " + account.getBalance()); 53: } 54: } 55: 56: ActionListener listener = new AddInterestListener(); 57: button.addActionListener(listener); 58: } 59: 60: private void createPanel() InvestmentFrame.java (cont.) Continued

43 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 61: { 62: panel = new JPanel(); 63: panel.add(rateLabel); 64: panel.add(rateField); 65: panel.add(button); 66: panel.add(resultLabel); 67: add(panel); 68: } 69: 70: private JLabel rateLabel; 71: private JTextField rateField; 72: private JButton button; 73: private JLabel resultLabel; 74: private JPanel panel; 75: private BankAccount account; 76: 77: private static final int FRAME_WIDTH = 450; 78: private static final int FRAME_HEIGHT = 100; 79: 80: private static final double DEFAULT_RATE = 5; 81: private static final double INITIAL_BALANCE = 1000; 82: } InvestmentFrame.java (cont.)

44 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Use a JTextArea to show multiple lines of text You can specify the number of rows and columns: final int ROWS = 10; final int COLUMNS = 30; JTextArea textArea = new JTextArea(ROWS, COLUMNS); setText : to set the text of a text field or text area append : to add text to the end of a text area Use newline characters to separate lines: textArea.append(account.getBalance() + "\n"); To use for display purposes only: textArea.setEditable(false); // program can call setText and append to change it Text Areas

45 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. To add scroll bars to a text area: JTextArea textArea = new JTextArea(ROWS, COLUMNS); JScrollPane scrollPane = new JScrollPane(textArea); Text Areas

46 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 01: import java.awt.event.ActionEvent; 02: import java.awt.event.ActionListener; 03: import javax.swing.JButton; 04: import javax.swing.JFrame; 05: import javax.swing.JLabel; 06: import javax.swing.JPanel; 07: import javax.swing.JScrollPane; 08: import javax.swing.JTextArea; 09: import javax.swing.JTextField; 10: 11: /** 12: A frame that shows the growth of an investment with variable interest. 13: */ 14: public class InvestmentFrame extends JFrame 15: { 16: public InvestmentFrame() 17: { 18: account = new BankAccount(INITIAL_BALANCE); 19: resultArea = new JTextArea(AREA_ROWS, AREA_COLUMNS); 20: resultArea.setEditable(false); 21: InvestmentFrame.java Continued

47 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 22: // Use helper methods 23: createTextField(); 24: createButton(); 25: createPanel(); 26: 27: setSize(FRAME_WIDTH, FRAME_HEIGHT); 28: } 29: 30: private void createTextField() 31: { 32: rateLabel = new JLabel("Interest Rate: "); 33: 34: final int FIELD_WIDTH = 10; 35: rateField = new JTextField(FIELD_WIDTH); 36: rateField.setText("" + DEFAULT_RATE); 37: } 38: 39: private void createButton() 40: { 41: button = new JButton("Add Interest"); 42: InvestmentFrame.java (cont.) Continued

48 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 43: class AddInterestListener implements ActionListener 44: { 45: public void actionPerformed(ActionEvent event) 46: { 47: double rate = Double.parseDouble( 48: rateField.getText()); 49: double interest = account.getBalance() 50: * rate / 100; 51: account.deposit(interest); 52: resultArea.append(account.getBalance() + "\n"); 53: } 54: } 55: 56: ActionListener listener = new AddInterestListener(); 57: button.addActionListener(listener); 58: } 59: 60: private void createPanel() 61: { 62: panel = new JPanel(); 63: panel.add(rateLabel); 64: panel.add(rateField); 65: panel.add(button); InvestmentFrame.java (cont.) Continued

49 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. 66: JScrollPane scrollPane = new JScrollPane(resultArea); 67: panel.add(scrollPane); 68: add(panel); 69: } 70: 71: private JLabel rateLabel; 72: private JTextField rateField; 73: private JButton button; 74: private JTextArea resultArea; 75: private JPanel panel; 76: private BankAccount account; 77: 78: private static final int FRAME_WIDTH = 400; 79: private static final int FRAME_HEIGHT = 250; 80: 81: private static final int AREA_ROWS = 10; 82: private static final int AREA_COLUMNS = 30; 83: 84: private static final double DEFAULT_RATE = 5; 85: private static final double INITIAL_BALANCE = 1000; 86: } InvestmentFrame.java (cont.)

50 Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. How would you modify the InvestmentFrame program if you didn't want to use scroll bars? Answer: Don't construct a JScrollPane and add the resultArea object directly to the frame. Self Check


Download ppt "Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Event Handling and GUI Components."

Similar presentations


Ads by Google