-4

The problem is I want to place the board in center of screen. I have tried with setLocation method in JFrame, setBounds etc but it didn't worked in that way. I have also tried to set the x-axis and y-axis values in chessBoard.setBounds(0, 0, boardSize.width, boardSize.height). It did help me to center the the whole board in the screen but one more problem arose: now my pieces do not move and MouseListener and MouseMotionListener shows exception...

Could anyone help me with this situation? I have tried to debug it but nothing happens good for me!

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;

public class ChessInterface extends JFrame implements MouseListener, MouseMotionListener {
    JLayeredPane layeredPane;
    JPanel chessBoard;
    JLabel chessPiece;
    int xAdjustment;
    int yAdjustment;
    public ChessInterface(){
        Dimension boardSize = new Dimension(400, 400);
        // Use a Layered Pane for this this application
        //FlowLayout flow=new FlowLayout();
        layeredPane = new JLayeredPane();
        getContentPane().add(layeredPane);
        layeredPane.setPreferredSize(boardSize);
        layeredPane.addMouseListener(this);
        layeredPane.addMouseMotionListener(this);
        //layeredPane.setLocation(90, 90);

        //Add a chess board to the Layered Pane
        chessBoard = new JPanel();
        layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);
        //chessBoard.setLocation(90, 90);
        chessBoard.setLayout( new GridLayout(8, 8) );
        //chessBoard.setPreferredSize( boardSize );
        chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

        for (int i = 0; i < 64; i++) {
            JPanel square = new JPanel( new BorderLayout() );
            chessBoard.add( square );
            int row = (i / 8) % 2;
            if (row == 0)
                square.setBackground( i % 2 == 0 ? Color.black : Color.white );
            else
                square.setBackground( i % 2 == 0 ? Color.white : Color.black );
        }
        //Add pieces to board
        JLabel piece;
        piece = new JLabel( new ImageIcon("C:\\Users\\Moemmer\\Documents\\NetBeansProjects\\ChessGame\\src\\Images\\23797642-complete-wooden-chess-set-with-s-full-complement-of-chess-pieces-in-both-colours-lined-up-in-rows-is - Copy.jpg") );
        JPanel panel = (JPanel)chessBoard.getComponent(0);
        panel.add(piece);
        piece = new JLabel(new ImageIcon("C:\\Users\\Moemmer\\Documents\\NetBeansProjects\\ChessGame\\src\\Images\\23797642-complete-wooden-chess-set-with-s-full-complement-of-chess-pieces-in-both-colours-lined-up-in-rows-is - Copy.jpg"));
        panel = (JPanel)chessBoard.getComponent(15);
        panel.add(piece);
        piece = new JLabel(new ImageIcon("C:\\Users\\Moemmer\\Documents\\NetBeansProjects\\ChessGame\\src\\Images\\23797642-complete-wooden-chess-set-with-s-full-complement-of-chess-pieces-in-both-colours-lined-up-in-rows-is - Copy.jpg"));
        panel = (JPanel)chessBoard.getComponent(16);
        panel.add(piece);
        piece = new JLabel(new ImageIcon("C:\\Users\\Moemmer\\Documents\\NetBeansProjects\\ChessGame\\src\\Images\\23797642-complete-wooden-chess-set-with-s-full-complement-of-chess-pieces-in-both-colours-lined-up-in-rows-is - Copy.jpg"));
        panel = (JPanel)chessBoard.getComponent(20);
        panel.add(piece);
    }

    public void mousePressed(MouseEvent e){
        chessPiece = null;
        Component c = chessBoard.findComponentAt(e.getX(), e.getY());
        if (c instanceof JPanel)
            return;
        Point parentLocation = c.getParent().getLocation();
        xAdjustment = parentLocation.x - e.getX();
        yAdjustment = parentLocation.y - e.getY();
        chessPiece = (JLabel)c;
        chessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);
        chessPiece.setSize(chessPiece.getWidth(), chessPiece.getHeight());
        layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER);
    }

    //Move the chess piece around

    public void mouseDragged(MouseEvent me) {
        if (chessPiece == null) return;
        chessPiece.setLocation(me.getX() + xAdjustment, me.getY() + yAdjustment);
    }

    //Drop the chess piece back onto the chess board

    public void mouseReleased(MouseEvent e) {
        if(chessPiece == null) return;
        chessPiece.setVisible(false);
        Component c = chessBoard.findComponentAt(e.getX(), e.getY());

        if (c instanceof JLabel){
            Container parent = c.getParent();
            parent.remove(0);
            parent.add( chessPiece );
        }

        else {
            Container parent = (Container)c;
            parent.add( chessPiece );
        }

        chessPiece.setVisible(true);
    }

    public void mouseClicked(MouseEvent e) {

    }

    public void mouseMoved(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e){

    }

    public void mouseExited(MouseEvent e) {

    }

    public void BackgroundImageJFrame()

    {

    }
}

ChessGame class.

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;

/**
 *
 * @author Moemmer
 */
public class ChessGame {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new ChessInterface();
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE );
        frame.pack();
        frame.setResizable(true);

        //Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // int height = screenSize.height;
        //int width = screenSize.width;
        //frame.setSize(width/2, height/2);
        //frame.setLocation(90, 90);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
        // TODO code application logic here
    }
}
PakkuDon
  • 1,627
  • 4
  • 22
  • 21
  • 2
    1) Please use code formatting for code, input/output & structured documents like HTML or XML. To do that, select the sample and click the `{}` button above the messaged posting/editing form. 2) Use a consistent and logical indent for code blocks. The indentation of the code is intended to help people understand the program flow. – Andrew Thompson Jan 12 '14 at 04:58
  • 1
    And don't double-space everything. – Hot Licks Jan 12 '14 at 05:00
  • @HotLicks I can't say for sure, but that is *sometimes* done by the OP in order to stop all the code lines running together when seen in SO. – Andrew Thompson Jan 12 '14 at 05:02
  • 2
    @AndrewThompson - Yeah, probably. But proper indentation will fix it, without having to tediously insert an extra return after every line. – Hot Licks Jan 12 '14 at 05:03
  • @HotLicks Agree that would be most tedious. In the worst cases, the OP actually inserts a `
    ` at the end of ever line! ;)
    – Andrew Thompson Jan 12 '14 at 05:24
  • 1
    Now that I can actually see the code I notice. `frame.setLocationRelativeTo( null );` That is odd given 1) the first paragraph makes no mention of it. 2) It is the easiest way to set a frame in the center of the screen! -- I still think it is not optimal to center a frame on-screen, but the way it was being done *should have worked.* Are you dead-set keen on having the frame centered on the screen? – Andrew Thompson Jan 12 '14 at 05:30

1 Answers1

2

Best is setLocationByPlatform(true);. See this answer for details:

Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433