JButton“消失”,尽管它不在JLabel的另一层

时间:2018-08-11 07:19:02

标签: java swing jlayeredpane

我目前正在制作象棋一样的棋盘游戏,所以我做了11 * 11的场地。在每个字段上都应该有一个JButton(在默认层上),在更高的层上是一个可移动的JLabel。但是标签将按钮推开了。这是简化的代码:

public class Demo {

    public static void main(String[] args) {

        ImageIcon image = new ImageIcon("C:src\\myImage.png");

        JFrame frame = new JFrame();

        JPanel mainPanel = new JPanel();

        JLayeredPane[] tileLayeredPane = new JLayeredPane[121];

        JButton button = new JButton();

        JLabel label = new JLabel();

        label.setIcon(image);

        button.setText("I am not visible!");

        for (int i = 0; i < tileLayeredPane.length; i++) { // creates 121 JLabels

            tileLayeredPane[i] = new JLayeredPane();

            tileLayeredPane[i].setLayout(new BoxLayout(tileLayeredPane[i], BoxLayout.Y_AXIS));
            tileLayeredPane[i].setOpaque(true);
        } 

        tileLayeredPane[0].add(button, JLayeredPane.DEFAULT_LAYER);
        tileLayeredPane[0].add(label, JLayeredPane.PALETTE_LAYER);

        mainPanel.setLayout(new GridLayout(11, 11));

        for(int i = 0; i < 121; i++) {

            mainPanel.add(tileLayeredPane[i]);
        }

        frame.add(mainPanel);
        frame.setVisible(true);
    }

}

1 个答案:

答案 0 :(得分:1)

  

在每个字段上都应该有一个JButton(在默认层上),并且在更高的层上是可移动JLabel

是的,因为您正在BoxLayout上使用JLayeredPane,这决定了组件的布局方式-JLayeredPane仅影响组件的绘制顺序,而不是它们的布局

我正在“猜测”您正在尝试将标签放在按钮上方,这就引出了一个问题:“为什么不使用按钮内置的图像支持”?