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

/*Practice using layouts Anderson, Franceschi */ import javax.swing.*; import ja

ID: 3884524 • Letter: #

Question

/*Practice using layouts
Anderson, Franceschi
*/

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class NestedLayoutPractice extends JFrame
{
private Container contents;
private Game game;

private BorderLayout bl;

private JLabel bottom;

// ***** Task 1: declare a JPanel named top
// also declare three JButton instance variables
// that will be added to the JPanel top
// these buttons will determine the grid size of the game:
// 3-by-3, 4-by-4, or 5-by-5
// Part 1 student code starts here:

// Part 1 student code ends here.

public NestedLayoutPractice()
{
super("Practicing layout managers");
contents = getContentPane();

// ***** Task 2:
// instantiate the BorderLayout manager bl
// Part 2 student code starts here:

// set the layout manager of the content pane contents to bl:

game = new Game(3); // instantiating the GamePanel object


// add panel (game) to the center of the content pane

// Part 2 student code ends here.

bottom = new JLabel("Have fun playing this Tile Puzzle game",
SwingConstants.CENTER);

// ***** Task 3:
// instantiate the JPanel component named top
// Part 3 student code starts here:

// set the layout of top to a 1-by-3 grid

// instantiate the JButtons that determine the grid size

// add the buttons to JPanel top

// add JPanel top to the content pane as its north component

// Part 3 student code ends here.

// ***** Task 5:
// Note: search for and complete Task 4 before performing this task
// Part 5 student code starts here:

// declare and instantiate an ActionListener

// register the listener on the 3 buttons
// that you declared in Task 1

// Part 5 student code ends here.

contents.add(bottom, BorderLayout.SOUTH);

setSize(325, 325);
setVisible(true);
}

// ***** Task 4:
// create a private inner class that implements ActionListener
// your method should identify which of the 3 buttons
// was the source of the event
// depending on which button was pressed,
// call the setUpGame method of the Game class
// with arguments 3, 4, or 5
// the API of that method is:
// public void setUpGame(int nSides)
// At the end of the method call validate()
// Part 4 student code starts here:

// Part 4 student code ends here.

public static void main(String[] args)
{
NestedLayoutPractice nl = new NestedLayoutPractice();
nl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Explanation / Answer

Below is your code:-

/* Practice using layouts

Anderson, Franceschi

*/

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class NestedLayoutPractice extends JFrame {

private Container contents;

private Game game;

private BorderLayout bl;

private JLabel bottom;

// ***** Task 1: declare a JPanel named top

// also declare three JButton instance variables

// that will be added to the JPanel top

// these buttons will determine the grid size of the game:

// 3-by-3, 4-by-4, or 5-by-5

private JPanel top;

private JButton three, four, five;

// task 1 ends here

public NestedLayoutPractice() {

super("Practicing layout managers");

contents = getContentPane();

// ***** Task 2: student code starts here

// instantiate the BorderLayout manager bl

bl = new BorderLayout();

// set the layout manager of the content pane contents to bl

contents.setLayout(bl);

game = new Game(3); // instantiating the GamePanel object

// add panel to the center of the content pane

contents.add(game, BorderLayout.CENTER);

// task 2 ends here

bottom = new JLabel("Have fun playing this Tile Puzzle game", SwingConstants.CENTER);

// ***** Task 3: Student code restarts here

// instantiate the JPanel component named top

top = new JPanel();

// set the layout of top to a 1-by-3 grid

top.setLayout(new GridLayout(1, 3));

// instantiate the JButtons that determine the grid size

three = new JButton("3 X 3");

four = new JButton("4 X 4");

five = new JButton("5 X 5");

// add the buttons to JPanel top

top.add(three);

top.add(four);

top.add(five);

// add JPanel top to the content pane as its north component

contents.add(top, BorderLayout.NORTH);

// task 3 ends here

// ***** Task 5: Student code restarts here

// Note: search for and complete Task 4 before performing this task

// declare and instantiate an ActionListener

ButtonHandler bh = new ButtonHandler();

// register the listener on the 3 buttons

// that you declared in Task 1

three.addActionListener(bh);

four.addActionListener(bh);

five.addActionListener(bh);

// task 5 ends here

contents.add(bottom, BorderLayout.SOUTH);

setSize(325, 325);

setVisible(true);

}

// ***** Task 4: Student code restarts here

// create a private inner class that implements ActionListener

// your method should identify which of the 3 buttons

// was the source of the event

// depending on which button was pressed,

// call the setUpGame method of the Game class

// with arguments 3, 4, or 5

// the API of that method is:

// public void setUpGame( int nSides )

private class ButtonHandler implements ActionListener {

public void actionPerformed(ActionEvent ae) {

if (ae.getSource() == three)

game.setUpGame(3);

else if (ae.getSource() == four)

game.setUpGame(4);

else if (ae.getSource() == five)

game.setUpGame(5);

validate();

}

}

// task 4 ends here

public static void main(String[] args) {

NestedLayoutPractice nl = new NestedLayoutPractice();

nl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}