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 j

ID: 3697048 • 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:
private JPanel top;
private JButton [] topButtons;
String [] topGridSize =
{"3-by-3",
"4-by-4",
"5-by-5",
};
private JButton reset;


// 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);
}
}

////////////////////////////////////////////////////////////////////

/* Using GridLayout to organize our window
Anderson, Franceschi
*/

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

public class Game extends JPanel
{
private JButton [][] squares;
private TilePuzzle game;

public Game( int newSide )
{
game = new TilePuzzle( newSide );
setUpGameGUI( );
}

public void setUpGame( int newSide )
{
game.setUpGame( newSide );
setUpGameGUI( );
}

public void setUpGameGUI( )
{
removeAll( ); // remove all components
setLayout( new GridLayout( game.getSide( ),
game.getSide( ) ) );

squares = new JButton[game.getSide( )][game.getSide( )];

ButtonHandler bh = new ButtonHandler( );

// for each button: generate button label,
// instantiate button, add to container,
// and register listener
for ( int i = 0; i < game.getSide( ); i++ )
{
for ( int j = 0; j < game.getSide( ); j++ )
{
squares[i][j] = new JButton( game.getTiles( )[i][j] );
add( squares[i][j] );
squares[i][j].addActionListener( bh );
}
}

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

private void update( int row, int col )
{
for ( int i = 0; i < game.getSide( ); i++ )
{
for ( int j = 0; j < game.getSide( ); j++ )
{
squares[i][j].setText( game.getTiles( )[i][j] );
}
}

if ( game.won( ) )
{
JOptionPane.showMessageDialog( Game.this,
"Congratulations! You won! Setting up new game" );
// int sideOfPuzzle = 3 + (int) ( 4 * Math.random( ) );
// setUpGameGUI( );
}
}

private class ButtonHandler implements ActionListener
{
public void actionPerformed( ActionEvent ae )
{
for( int i = 0; i < game.getSide( ); i++ )
{
for( int j = 0; j < game.getSide( ); j++ )
{
if ( ae.getSource( ) == squares[i][j] )
{
if ( game.tryToPlay( i, j ) )
update( i, j );
return;
} // end if
} // end inner for loop
} // outer for loop
} // end actionPerformed method
} // end ButtonHandler class
} // end Game class

///////////////////////////////////////////////////////////////////

/* TilePUzzle class
Anderson, Franceschi
*/

public class TilePuzzle
{
private int side; // grid size for game 1
private String[][] tiles;
private int emptyRow;
private int emptyCol;

public TilePuzzle( int newSide )
{
setUpGame( newSide );
}

public void setUpGame( int newSide )
{
if ( side > 0 )
side = newSide;
else
side = 3;
side = newSide;
tiles = new String[side][side];
emptyRow = side - 1;
emptyCol = side - 1;

for ( int i = 0; i < side; i++ )
{
for ( int j = 0; j < side; j++ )
{
tiles[i][j] = String.valueOf( ( side * side )
- ( side * i + j + 1 ) );
}
}
// set empty tile to blank
tiles[side - 1][side - 1] = "";
}

public int getSide( )
{
return side;
}
/*
public int getEmptyRow( )
{
return emptyRow;
}

public int getEmptyCol( )
{
return emptyCol;
}
*/
public String[][] getTiles( )
{
return tiles;
}

public boolean tryToPlay( int row, int col )
{
if ( possibleToPlay( row, col ) )
{
// play: switch empty String and tile label at row, col
tiles[emptyRow][emptyCol] = tiles[row][col];
tiles[row][col] = "";

emptyRow = row;
emptyCol = col;
return true;
}
else
return false;
}

public boolean possibleToPlay( int row, int col )
{
if ( ( col == emptyCol && Math.abs( row - emptyRow ) == 1 )
|| ( row == emptyRow && Math.abs( col - emptyCol ) == 1 ) )
return true;
else
return false;
}

public boolean won( )
{
for ( int i = 0; i < side ; i++ )
{
for ( int j = 0; j < side; j++ )
{
if ( !( tiles[i][j].equals(
String.valueOf( i * side + j + 1 ) ) )
&& ( i != side - 1 || j != side - 1 ) )
return false;
}
}
return true;
}

}

Explanation / Answer

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package nestedlayoutpractice;

/**
*
* @author Admin
*/
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:
      private JPanel top;
      private JButton [] topButtons;
      String [] topGridSize =
      {"3-by-3",
       "4-by-4",
       "5-by-5",    
      };
      private JButton reset;


// Part 1 student code ends here.

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

    // ***** Task 2:
    // instantiate the BorderLayout manager bl
  
    BorderLayout b1 = new BorderLayout();
    b1.addLayoutComponent(top, b1);
    b1.getConstraints(top);
    b1.getLayoutAlignmentX(contents);
    b1.getLayoutAlignmentY(contents);
    b1.layoutContainer(contents);
    b1.notifyAll();
    b1.setHgap(WIDTH);
    b1.setVgap(WIDTH);
    b1.toString();
  
  
    // 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
    JPanel top = new JPanel();
    top.action(null, top);
    top.add(top);
      //Component add = top.add(null, top);
    top.addAncestorListener(null);
    top.addFocusListener(null);
    top.addHierarchyBoundsListener(null);
    top.areFocusTraversalKeysSet(WIDTH);
    top.checkImage(null, top);
    top.checkImage(null, WIDTH, WIDTH, top);
    top.unregisterKeyboardAction(null);
  
    // 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

    JButton btn1 = new JButton();
    btn1.addComponentListener(null);
    btn1.add(btn1);
    btn1.unregisterKeyboardAction(null);
  
    JButton btn2 = new JButton();
    btn2.add(btn2, top);
    btn2.addComponentListener(null);
    btn2.addActionListener(null);
    btn2.add(btn2, top);
    btn2.addFocusListener(null);
    btn2.unregisterKeyboardAction(null);
    btn2.transferFocusUpCycle();
  
    JButton btn3 = new JButton();
    btn3.add(btn3, top, WIDTH);
    btn3.addActionListener(null);
    btn3.add(btn3, WIDTH);
    btn3.addHierarchyBoundsListener(null);
          

  
    // add the buttons to JPanel top

    top.add(btn1);
    top.add(btn1, 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:


private class ActListen1 extends ActionListener    {

     /*
     btnPressed = btn1 if button 1 is pressed
     btnPressed = btn2 if button 2 is pressed
     btnPressed = btn3 if button 3 is pressed
     btnPressed = btn4 if button 4 is pressed    
     // if ( btn1 pressed )
     */
   
} // end class

// Part 4 student code ends here.

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

///////////////////////////////////////////////////