Note that there are some explanatory texts on larger screens.

plurals
  1. PODrawing and deleting jlabels from a jpanel
    primarykey
    data
    text
    <p>I am making a chess game gui by setting up a grid of jpanels with jlabels on top (the piece images). I set up the board with each square (jpanel) having an empty jlabel w/ visibility set to false. I then go through each of the jpanels and set the jlabel picture to an image corresponding to one of my pieces. I know whether or not to draw a piece because I have a variable _board[8][8] that tells me if that spot is occupied and by whom. This is how I create the original board:</p> <p>EDIT:</p> <p>I actually changed this up quite a bit, that way I don't have to reload images each time:</p> <pre><code>public ChessGameGUI(Square[][] board) throws IOException { Dimension size = new Dimension(500, 400); Dimension boardSize = new Dimension(400, 400); layeredPane = new JLayeredPane(); getContentPane().add(layeredPane); layeredPane.setPreferredSize(size); theBoard = new JPanel(); layeredPane.add(theBoard, JLayeredPane.DEFAULT_LAYER); layeredPane.addMouseListener(this); GridLayout chessBoardLayout = new GridLayout(8,8); theBoard.setLayout(chessBoardLayout); theBoard.setPreferredSize(boardSize); theBoard.setBounds(0, 0, boardSize.width, boardSize.height); boolean drawWhite = true; // setup initial squares for(int y = 0; y &lt; 8; y++) { for(int x = 0; x &lt; 8; x++) { BorderLayout squareBorder = new BorderLayout(); JPanel aChessSquare = new JPanel(squareBorder); if(drawWhite) aChessSquare.setBackground(Color.WHITE); else aChessSquare.setBackground(Color.GRAY); // load initial images if(board[x][y]._isOccupied) { BufferedImage logo = null; try{ // load the image String path = findPieceImagePath(board, x, y); logo = ImageIO.read(new File(path)); ImageIcon pieceImage = new ImageIcon(logo); JLabel pieceJLabel = new JLabel(); pieceJLabel.setIcon(pieceImage); // new pieceJLabel.setVisible(true); // new aChessSquare.add(pieceJLabel); } catch (IOException e) { e.printStackTrace(); } // end try catch }// end if else { JLabel pieceJLabel = new JLabel(); pieceJLabel.setVisible(false); aChessSquare.add(pieceJLabel); } theBoard.add(aChessSquare); // alternate background colors if(x == 7); else drawWhite = !drawWhite; } } System.out.println("the number of components = " + theBoard.getComponentCount()); } </code></pre> <p>This loads the initial board just fine, however I can't seem to get a specific component. When I click on one of the pieces, that square should light up. The only square that ever gets the green outline is the one in the top left (0, 0).</p> <pre><code>public void mousePressed(MouseEvent e) { System.out.println("mouse press x = " + e.getX() + " y = " + e.getY()); // find which piece on the board is being clicked int gameX, gameY; gameX = e.getX() / 50; gameY = e.getY() / 50; System.out.println("gameX = " + gameX + " gameY = " + gameY); // out of bounds if(gameX &lt; 0 || gameY &lt; 0) return; // true if selected a piece on this team if(myGame._board[gameX][gameY]._isOccupied &amp;&amp; !_pieceSelected &amp;&amp; myGame._board[gameX][gameY]._team == myGame._turn) { System.out.println("selected new piece"); JPanel curSquare = (JPanel)theBoard.getComponentAt(gameX, gameY); curSquare.setBorder(BorderFactory.createLineBorder(Color.green)); _pieceSelected = !_pieceSelected; return; } </code></pre> <p>I guess I am having problems with this line: JPanel curSquare = (JPanel)theBoard.getComponentAt(gameX, gameY);</p> <p>however, the gameX and gameY values are being set properly.</p> <p>Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload