Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
棋盘上的java2D棋子拖放_Java_Drag And Drop_Java 2d - Fatal编程技术网

棋盘上的java2D棋子拖放

棋盘上的java2D棋子拖放,java,drag-and-drop,java-2d,Java,Drag And Drop,Java 2d,为了一个学校项目,我正在用爪哇制作一个棋盘 有一定的限制,因为我们不能为任何一个棋子使用图像。我们需要用多种形状制作一个棋子 例如,我有一个由圆形和圆形正方形组成的兵。下面是一些代码。这是定义为一组字符的板,每个字符表示板上的一个检查 private char[][] board = new char[][] { { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' }, { 'P',

为了一个学校项目,我正在用爪哇制作一个棋盘

有一定的限制,因为我们不能为任何一个棋子使用图像。我们需要用多种形状制作一个棋子

例如,我有一个由圆形和圆形正方形组成的兵。下面是一些代码。这是定义为一组字符的板,每个字符表示板上的一个检查

  private char[][] board = new char[][] { { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' }, 
                                      { 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' }, 
                                      { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
                                      { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
                                      { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
                                      { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
                                      { 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' }, 
                                      { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' } };
这是创建普通棋子的方法的内容

  for(int i=0; i<8; i++) {
        for(int j=0; j<8;j++) {

            if(board[j][i] == 'P') {
                Ellipse2D.Double ellipse = new Ellipse2D.Double(i * getWidth() / 8 + 20,
                                                                j * getHeight() / 8 + 20,
                                                                getWidth()/8 - 40,getHeight()/8 - 40);

                g2d.setPaint(new GradientPaint(i * getWidth() / 8 , j * getHeight() / 8 + 20, Color.orange, i * getWidth() / 8, j * getHeight() / 8 + 60,
                         Color.pink, false) );

                g2d.fill(ellipse);

                RoundRectangle2D.Double roundRect = new RoundRectangle2D.Double(i*getWidth() / 8 + 20,
                                                                                j*getHeight() / 8 + 10,
                                                                                getWidth()/8 - 40, getHeight()/8-70,5,5);

                g2d.setPaint(new GradientPaint(i * getWidth() / 8 , j * getHeight() / 8 + 20, new Color(20,20,150), i * getWidth() / 8, j * getHeight() / 8 + 60,
                        new Color(20, 20, 100), false) );

                g2d.fill(roundRect);

            }
        }
    }

for(int i=0;i我建议不要使用图像,而是在程序开始时创建一些BuffereImage,为您的棋子创建图像。然后将它们添加到ImageIcons(可以多次使用),并将它们添加到JLabel(无法使用)例如,白色的一面将有8个用于8个棋子的JLabel,但每个JLabel将使用相同的白色棋子图像图标。然后只需添加代表棋盘上每个单元格的JLabel JPanel。我会给单元格JPanel一个GridBagLayout,以便JLabel将被添加到其中心,而不会引起任何麻烦


例如,请查看:

我认为您不能拖放JPanel。@托托:我同意,它不是开箱即用的,但可以在扩展后添加,但实际上不需要。只需使用JLayeredPane,然后单击将JLabel从JPanel向上移动到JLayeredPane的拖动层。有关详细信息,请参阅上面的链接这方面的例子。我运行了你的例子。它非常完整;你也可以在做的时候制作AI。绝对令人惊讶!我不敢相信我以前在java 2D中寻找一些国际象棋的例子时没有找到这个例子