Java 在JButton上重叠图像图标

Java 在JButton上重叠图像图标,java,swing,jbutton,overlap,imageicon,Java,Swing,Jbutton,Overlap,Imageicon,我正在用JavaSwing开发一个游戏的GUI:boardGame的框架是一个GridLayout,每个单元格中都有一个JButton。单元格有一个从0到3的属性“height”,如果我点击一个按钮,我想增加这个高度。 特别是,我想将该JButton上的上一个imageIcon(设置为.setIcon(“image.png”))与下一层的另一个透明imageIcon(即下一个高度)重叠,以便在视觉上提供另一个高度 类似这样的内容: 在创建棋盘游戏的类中: battlefieldPanel.s

我正在用JavaSwing开发一个游戏的GUI:boardGame的框架是一个GridLayout,每个单元格中都有一个JButton。单元格有一个从0到3的属性“height”,如果我点击一个按钮,我想增加这个高度。 特别是,我想将该JButton上的上一个imageIcon(设置为.setIcon(“image.png”))与下一层的另一个透明imageIcon(即下一个高度)重叠,以便在视觉上提供另一个高度

类似这样的内容:

在创建棋盘游戏的类中:

 battlefieldPanel.setLayout(new GridLayout(5,5));
        for(int j=4; j>-1 ; j--){
            for(int i=0; i<5; i++){
                //here i create a button for every cell
                buttons[i][j] = new CellButton();               //a class that extends JButton
                buttons[i][j].setCell(new Cell(i,j));
                buttons[i][j].setSize(100,100);                 //imageIcons are already 100x100 pixels
                buttons[i][j].setBorderPainted(false);   
                buttons[i][j].setContentAreaFilled(false);      //give transparency to the button
                buttons[i][j].setIcon("level0.png");            //initial image of height 0
                buttons[i][j].getCell().setHeight(0);
                battlefieldPanel.add(buttons[i][j]);
                buttons[i][j].addActionListener(new ButtonHandler(buttons[i][j], pics));

查看允许您将两个或多个图标组合成一个图标的。最好您发布出现问题的代码。但请尽量将代码保持在描述问题所需的绝对最小值。例如,你可以在这里发布修改一个按钮的代码。你的前两次尝试在我看来是正确的。它们有什么问题?我希望我知道,它允许您将两个或多个图标组合成一个图标。最好您发布出现问题的代码。但请尽量将代码保持在描述问题所需的绝对最小值。例如,你可以在这里发布修改一个按钮的代码。你的前两次尝试在我看来是正确的。他们怎么了?我希望我知道
public class ButtonHandler implements ActionListener {                                           
[...]                                   
@Override
public void actionPerformed(ActionEvent e) {
   incrementHeight();
}

public void incrementHeight() throws CellHeightException, ReachHeightLimitException, IOException {

      JLayeredPane jlp = new JLayeredPane();
      SpringLayout lpLayout = new SpringLayout();
      jlp.setLayout(lpLayout);

        if (button.getCell().getHeight() == 0) {

            ////////FIRST TRY//////////
            URL urlBG = new URL("url1");
            URL urlFG = new URL("url2");
            final BufferedImage imgBG = ImageIO.read(urlBG);
            final BufferedImage imgFG = ImageIO.read(urlFG);

            final BufferedImage combinedImage = new BufferedImage(
                    imgBG.getWidth(),
                    imgBG.getHeight(),
                    BufferedImage.TYPE_INT_ARGB );
            Graphics2D g = combinedImage.createGraphics();
            g.drawImage(imgBG,0,0,null);
            g.drawImage(imgFG,0,0,null);
            g.dispose();

             button.setIcon(new ImageIcon(combinedImage));

            /////////SECOND TRY//////////////
            BufferedImage bigIcon =  ImageIO.read(new File("level0.png"));
            BufferedImage smallIcon = ImageIO.read(new File("level1.png"));
            BufferedImage finalIcon = new BufferedImage(bigIcon.getWidth(), bigIcon.getWidth(), BufferedImage.TYPE_INT_ARGB);
            Graphics g = finalIcon.getGraphics();
            g.drawImage(bigIcon,0,0,null);
            g.drawImage(smallIcon,0,0,null);
            button.add(new JLabel(new Imagecon(finalIcon)));
            g.dispose();

            //////THIRD TRY//////////
            JLayeredPane jlp = new JLayeredPane();
            SpringLayout lpLayout = new SpringLayout();
            jlp.setLayout(lpLayout);
            JLabel l0 = new JLabel(pics[0].getIcon()) ; //l0.setBounds(0,0,100,100); 
            l0.setOpaque(true);
            JLabel l1 = new JLabel(pics[1].getIcon()) ; //l1.setBounds(0,0,100,100); 
            l1.setOpaque(true);
            jlp.add(l0);
            jlp.add(l1);
            lpLayout.putConstraint(SpringLayout.NORTH, l0, 0, SpringLayout.NORTH, jlp);
            lpLayout.putConstraint(SpringLayout.SOUTH, l0, 0, SpringLayout.SOUTH, jlp);
            lpLayout.putConstraint(SpringLayout.WEST, l0, 0, SpringLayout.WEST, jlp);
            lpLayout.putConstraint(SpringLayout.EAST, l0, 0, SpringLayout.EAST, jlp);
            lpLayout.putConstraint(SpringLayout.NORTH, l1, 0, SpringLayout.NORTH, jlp);
            lpLayout.putConstraint(SpringLayout.SOUTH, l1, 0, SpringLayout.SOUTH, jlp);
            lpLayout.putConstraint(SpringLayout.WEST, l1, 0, SpringLayout.WEST, jlp);
            lpLayout.putConstraint(SpringLayout.EAST, l1, 0, SpringLayout.EAST, jlp);
            button.setOpaque(true);
            //jlp.add(button);
            button.add(jlp);
            jlp.setVisible(true);

            button.getCell().incrementHeight();   //ai the edn i call the real method that handles the backend
        }