Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

1. Add scroll bars to the text area by completing the following steps in the con

ID: 3532616 • Letter: 1

Question

1. Add scroll bars to the text area by completing the following steps in the constructor

a) Create a JScrollPane object called scrolledText, passing in theText.

b) Change the line that adds to the textPanel, by passing in scrolledText

(which now has theText.)


2. Edit the action listener by adding 6 more branches to the else-if logic. Each

branch will compare the actionCommand to the 6 submenu items: Metal,

Motif, Window, Never, Always, and As Needed.

a) Each Look and Feelsubmenu item will use a try-catch statement to set the

look and feel to the appropriate one, displaying an error message if this was

not accomplished.

b) Each Scroll Barssubmenu item will set the horizontal and vertical scroll

bar policy to the appropriate values.

c) Any components that have already been created need to be updated. This

can be accomplished by calling the

SwingUtilities.updateComponentTreeUI method, passing a

reference to the component that you want to update as an argument.

Specifically you will need to add the line

SwingUtilities.updateComponentTreeUIgetContentPane());

to each branch that you just added to the logic structure


==========================================================================

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;


public class NoteTaker extends JFrame

{

//constants for set up of note taking area

public static final int WIDTH = 600;

public static final int HEIGHT = 300;

public static final int LINES = 13;

public static final int CHAR_PER_LINE = 45;

  

//objects in GUI

private JTextArea theText; //area to take notes

private JMenuBar mBar; //horizontal menu bar

private JPanel textPanel; //panel to hold scrolling text area

private JMenu notesMenu; //vertical menu with choices for notes

  

//THESE ITEMS ARE NOT YET USED- YOU WILL BE CREATING THEM IN THIS LAB

private JMenu viewMenu; //vertical menu with choices for views

private JMenu lafMenu; //vertical menu with look and feel

private JMenu sbMenu; //vertical menu with scroll bar option

private JScrollPane scrolledText; //scroll bars

  

//default notes

private String note1 = "No Note 1.";

private String note2 = "No Note 2.";

  

//constructor

public NoteTaker()

{

//create a closeable JFrame with a specific size

super("Note Taker");

setSize(WIDTH, HEIGHT);

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);


//set layout of the window

setLayout(new BorderLayout());


//creates the vertical menus

createNotes();

createViews();


//creates horizontal menu bar and adds vertical menus to it

mBar = new JMenuBar();

mBar.add(notesMenu);

  

//ADD THE viewMenu TO THE MENU BAR HERE

mBar.add(viewMenu);

setJMenuBar(mBar);


//creates a panel to take notes on

textPanel = new JPanel();

textPanel.setBackground(Color.BLUE);

theText = new JTextArea(LINES, CHAR_PER_LINE);

theText.setBackground(Color.WHITE);


//CREATE A JScrollPane OBJECT HERE CALLED scrolledText AND PASS IN theText, THEN

//CHANGE THE LINE BELOW BY PASSING IN scrolledText

textPanel.add(theText);

add(textPanel, BorderLayout.CENTER);

scrolledText = new JScrollPane();

theText = new JTextArea(LINES, CHAR_PER_LINE);

theText.setBackground(Color.WHITE);

scrolledText.add(theText);

scrolledText.setVisible(false);

}

  

//creates vertical menu associated with Notes menu item on menu bar

public void createNotes()

{

notesMenu = new JMenu("Notes");

JMenuItem item;

  

item = new JMenuItem("Save Note 1");

item.addActionListener(new MenuListener());

notesMenu.add(item);

  

item = new JMenuItem("Save Note 2");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Open Note 1");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Open Note 2");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Clear");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Exit");

item.addActionListener(new MenuListener());

notesMenu.add(item);

}

  

//creates vertical menu associated with Views menu item on the menu bar

public void createViews()

{

  

viewMenu = new JMenu("Views");

createLookAndFeel();

createScrollBars();

viewMenu.add(lafMenu);

viewMenu.add(sbMenu);

  

}


//creates the look and feel submenu

public void createLookAndFeel()

{

lafMenu = new JMenu("Look And Feel");

  

JMenuItem item;

  

item = new JMenuItem("Metal");

item.addActionListener(new MenuListener());

lafMenu.add(item);

  

item = new JMenuItem("Motif");

item.addActionListener(new MenuListener());

lafMenu.add(item);

  

item = new JMenuItem ("Windows");

item.addActionListener(new MenuListener());

lafMenu.add(item);

  

}

  

//creates the scroll bars submenu

public void createScrollBars()

{

sbMenu = new JMenu("Scroll Bars");

JMenuItem item;

  

item = new JMenuItem ("Never");

item.addActionListener(new MenuListener());

sbMenu.add(item);

  

item = new JMenuItem("Always");

item.addActionListener(new MenuListener());

sbMenu.add(item);

  

item = new JMenuItem("As Needed");

item.addActionListener(new MenuListener());

sbMenu.add(item);

  

  

}


private class MenuListener implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

String actionCommand = e.getActionCommand();

if (actionCommand.equals("Save Note 1"))

note1 = theText.getText();

else if (actionCommand.equals("Save Note 2"))

note2 = theText.getText();

else if (actionCommand.equals("Clear"))

theText.setText("");

else if (actionCommand.equals("Open Note 1"))

theText.setText(note1);

else if (actionCommand.equals("Open Note 2"))

theText.setText(note2);

else if (actionCommand.equals("Exit"))

System.exit(0);

  

//*****ADD 6 BRANCHES TO THE ELSE-IF STRUCTURE TO ALLOW ACTION TO BE PERFORMED FOR

//*****EACH MENU ITEM YOU HAVE CREATED

  

else

theText.setText("Error in memo interface");

}

  

}



  


  

public static void main(String[] args)

{

NoteTaker gui = new NoteTaker();

gui.setVisible(true);

}

}

Explanation / Answer

Here you go :


import javax.swing.*;


import java.awt.*;

import java.awt.event.*;


public class NoteTaker extends JFrame

{

//constants for set up of note taking area

public static final int WIDTH = 600;

public static final int HEIGHT = 300;

public static final int LINES = 13;

public static final int CHAR_PER_LINE = 45;


//objects in GUI

private JTextArea theText; //area to take notes

private JMenuBar mBar; //horizontal menu bar

private JPanel textPanel; //panel to hold scrolling text area

private JMenu notesMenu; //vertical menu with choices for notes


//THESE ITEMS ARE NOT YET USED- YOU WILL BE CREATING THEM IN THIS LAB

private JMenu viewMenu; //vertical menu with choices for views

private JMenu lafMenu; //vertical menu with look and feel

private JMenu sbMenu; //vertical menu with scroll bar option

private JScrollPane scrolledText; //scroll bars


//default notes

private String note1 = "No Note 1.";

private String note2 = "No Note 2.";


//constructor

public NoteTaker()

{

//create a closeable JFrame with a specific size

super("Note Taker");

setSize(WIDTH, HEIGHT);

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);


//set layout of the window

setLayout(new BorderLayout());


//creates the vertical menus

createNotes();

createViews();


//creates horizontal menu bar and adds vertical menus to it

mBar = new JMenuBar();

mBar.add(notesMenu);


//ADD THE viewMenu TO THE MENU BAR HERE

mBar.add(viewMenu);

setJMenuBar(mBar);


//creates a panel to take notes on

textPanel = new JPanel();

textPanel.setBackground(Color.BLUE);

theText = new JTextArea(LINES, CHAR_PER_LINE);

theText.setBackground(Color.WHITE);


//CREATE A JScrollPane OBJECT HERE CALLED scrolledText AND PASS IN theText, THEN

//CHANGE THE LINE BELOW BY PASSING IN scrolledText

textPanel.add(theText);

add(textPanel, BorderLayout.CENTER);

// scrolledText = new JScrollPane();

// theText = new JTextArea(LINES, CHAR_PER_LINE);

// theText.setBackground(Color.WHITE);

// scrolledText.add(theText);

// scrolledText.setVisible(true);

scrolledText = new JScrollPane (theText);

scrolledText.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );

textPanel.add(scrolledText);

}


public JFrame getFrame()

{

return this;

}

//creates vertical menu associated with Notes menu item on menu bar

public void createNotes()

{

notesMenu = new JMenu("Notes");

JMenuItem item;


item = new JMenuItem("Save Note 1");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Save Note 2");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Open Note 1");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Open Note 2");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Clear");

item.addActionListener(new MenuListener());

notesMenu.add(item);


item = new JMenuItem("Exit");

item.addActionListener(new MenuListener());

notesMenu.add(item);

}


//creates vertical menu associated with Views menu item on the menu bar

public void createViews()

{


viewMenu = new JMenu("Views");

createLookAndFeel();

createScrollBars();

viewMenu.add(lafMenu);

viewMenu.add(sbMenu);


}


//creates the look and feel submenu

public void createLookAndFeel()

{

lafMenu = new JMenu("Look And Feel");


JMenuItem item;


item = new JMenuItem("Metal");

item.addActionListener(new MenuListener());

lafMenu.add(item);


item = new JMenuItem("Motif");

item.addActionListener(new MenuListener());

lafMenu.add(item);


item = new JMenuItem ("Windows");

item.addActionListener(new MenuListener());

lafMenu.add(item);


}


//creates the scroll bars submenu

public void createScrollBars()

{

sbMenu = new JMenu("Scroll Bars");

JMenuItem item;


item = new JMenuItem ("Never");

item.addActionListener(new MenuListener());

sbMenu.add(item);


item = new JMenuItem("Always");

item.addActionListener(new MenuListener());

sbMenu.add(item);


item = new JMenuItem("As Needed");

item.addActionListener(new MenuListener());

sbMenu.add(item);



}


private class MenuListener implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

String actionCommand = e.getActionCommand();

if (actionCommand.equals("Save Note 1"))

{

note1 = theText.getText();

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Save Note 2"))

{

note2 = theText.getText();

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Clear"))

{

theText.setText("");

SwingUtilities.updateComponentTreeUI(getContentPane());

}else if (actionCommand.equals("Open Note 1"))

{

theText.setText(note1);

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Open Note 2"))

{

theText.setText(note2);

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Exit"))

{

System.exit(0);

}

//*****ADD 6 BRANCHES TO THE ELSE-IF STRUCTURE TO ALLOW ACTION TO BE PERFORMED FOR

//*****EACH MENU ITEM YOU HAVE CREATED

else if (actionCommand.equals("Metal"))

{

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");

}

catch(Exception e1)

{

JOptionPane.showMessageDialog( getFrame(), "Error loading Metal Look and Feel");

}

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Motif"))

{

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

} catch(Exception e1)

{

JOptionPane.showMessageDialog( getFrame(), "Error loading Motif Look and Feel");

}

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Windows"))

{

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch(Exception e1)

{

JOptionPane.showMessageDialog( getFrame(), "Error loading Windows Look and Feel");

}

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Never"))

{

scrolledText.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER );

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("Always"))

{

scrolledText.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else if (actionCommand.equals("As Needed"))

{

scrolledText.setVerticalScrollBarPolicy ( ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED );

SwingUtilities.updateComponentTreeUI(getContentPane());

}

else

{

theText.setText("Error in memo interface");

SwingUtilities.updateComponentTreeUI(getContentPane());

}

}


}






public static void main(String[] args)

{

NoteTaker gui = new NoteTaker();

gui.setVisible(true);

}

}