如何将图像放在特定的JPanel中?

三连胜

我最近正在尝试棋盘游戏,现在正在制作Checkers棋盘游戏。但是我不能弄清楚如何在电池单元中显示芯片GridLayout每个单元都有一个自己的JPanel,我通过FOR Loop在2D数组中分配了它

我需要在特定的JPanel中显示p1Chip只是一个图像,可以说它的变量名是,而不弄乱.pngboard[2][3]GridLayout

有关如何执行此操作的示例代码将非常有用,因为它将帮助我更好地理解。

我已经搜索了互联网,但找不到所需的东西,或者至少找到了解释操作方法的东西。

这是到目前为止的代码:

package checkers;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import javax.swing.JTextField;

public class Main extends JFrame {

    private JPanel contentPane;

    Image p1Chip;

    JPanel[][] board = new JPanel[8][8];



    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main frame = new Main();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Main() throws IOException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 800, 800);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        startGame();
    }


    //Start Game!
        public void startGame() throws IOException{
            drawBoard();
        }

//******************************DRAWS BOARD******************************\\

 //Draws the board
    public void drawBoard() throws IOException{

        System.out.println("Start Drawing Board!");

        getContentPane().setLayout(new GridLayout(8,8));

        int colorAssignRow = 0; 
        int colorAssignCol = 0;

        for(int r = 0; r < 8; r++){

            colorAssignRow++;
            colorAssignCol = 0;

            for(int c = 0; c < 8; c++){

                colorAssignCol++;

                board[r][c] = new JPanel();


                if(colorAssignRow%2!=0){
                    if(colorAssignCol%2==0)board[r][c].setBackground(Color.RED);
                        else board[r][c].setBackground(Color.BLACK);
                }
                else if(colorAssignRow%2==0){
                    if(colorAssignCol%2==0)board[r][c].setBackground(Color.BLACK);
                    else board[r][c].setBackground(Color.RED);
                }

                getContentPane().add(board[r][c]);
            }

        }

        System.out.println("Board Drawing Done!");


    }

//******************************END OF DRAWING BOARD******************************\\

    public void getAssets(){
        System.out.println("Getting assets!");
        p1Chip = new ImageIcon("P1ChipNormal.png").getImage();
    }

}

上面的代码可以正常工作,因为它仅输出JPanels的Checkers板,每个均位于网格的不同单元中。

更新:添加此方法以显示筹码,但是当我运行此方法时,没有筹码显示。

 public void drawChips(){


    /*
     * When:    0 and even
     *          1 and odd
     *          2 and even
     */

    //Drawing Player One Chips\\
    for(int r = 0; r < 8; r++){ 
        for(int c = 0; c < 8; c++){

            label[r][c] = new JLabel();
            board[r][c] = new JPanel();

            if(r==0 && c%2==0){
                label[r][c].setIcon(p1Chip);
                board[r][c].add(label[r][c]);
            }
            else if(r==1 && c%2!=0 && c!=0){
                label[r][c].setIcon(p1Chip);
                board[r][c].add(label[r][c]);
            }
            else if(r==2 && c%2==0){
                label[r][c].setIcon(p1Chip);
                board[r][c].add(label[r][c]);
            }

    }   
    }   
}
充满鳗鱼的气垫船

在JPanel单元中显示芯片:

  • 将芯片图像放入ImageIcon
  • 通过JLabel的setIcon(chipIcon)方法将该ImageIcon放入JLabel
  • 通过add(someLabel)方法将JLabel添加到JPanel-现在,JPanel将显示图像。

然后,如果您想单击并移动芯片,

  • 给它提供MouseListener和MouseMotionListener(MouseAdapater)
  • 单击时,将JLabel从其包含的JPanel中移除,并将其提升到顶层窗口的玻璃窗格。
  • 使用MouseAdapter移动它。
  • 释放后,将JLabel放在鼠标悬停的JPanel上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将图像放在引导程序中的图像之上;

来自分类Dev

如何将文本放在堆栈中的彼此图像上方?

来自分类Dev

如何将图像放在自定义路径中

来自分类Dev

如何将图像背景放在变量中?

来自分类Dev

如何将图像放在 ListView 中 TextView 行的底部

来自分类Dev

如何将焦点放在Uifigure中的特定元素上?

来自分类Dev

如何将图像放在视图的中心?

来自分类Dev

如何将图像导入JPanel

来自分类Dev

如何将图像路径放在数据库中的html :: image()中

来自分类Dev

如何将文本数据放在灯箱中而不是图像中

来自分类Dev

如何将ComboBoxTableCell放在TableView中?

来自分类Dev

如何将jpg放在JComboBox中?

来自分类Dev

如何将重点放在榆木中?

来自分类Dev

如何将ID放在fnSelect()中?

来自分类Dev

如何将QComboBox放在QColumnView中

来自分类Dev

如何将jpg放在JComboBox中?

来自分类Dev

如何将函数放在宏中?

来自分类Dev

如何将 php 放在 php 中

来自分类Dev

如何将“AdaptiveActionSet”放在“AdaptiveColumn”中?

来自分类Dev

如何将简单的滑块图像放在Google Maps InfoWindow中?

来自分类Dev

如何将图像放在Excel Java单元格中?

来自分类Dev

如何将背景图像放在第二帧中?

来自分类Dev

如何将P元素内的文本放在图像旁边?

来自分类Dev

如何将图像放在文本小部件的顶部

来自分类Dev

如何将单个图像放在其背景框内居中?

来自分类Dev

如何将图像放在其他盒子上?

来自分类Dev

如何将图像放在左上角?

来自分类Dev

如何将单个图像放在其背景框内居中?

来自分类Dev

如何将图像放在文本小部件的顶部