Question: public NestedLayoutPractice needs to work on the student parts to get the output, everything else stays the same. /* Using GridLayout to organize our window

public NestedLayoutPractice needs to work on the student parts to get the output, everything else stays the same.

/* 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

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

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

}

Please only answer if you know the true answer. I appreciate it.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!