JButton "исчезает", хотя находится на другом слое, чем JLabel

В настоящее время я делаю шахматную настольную игру, поэтому я создал поле 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 ответ

Решение

На каждом поле должен быть JButton (на уровне по умолчанию), а на более высоком уровне - подвижный JLabel.

Да, потому что вы используете BoxLayout на JLayeredPane, который решает, как компоненты должны быть расположены - JLayeredPane влияет только на порядок, в котором компоненты окрашены, а не как они расположены

Я "догадываюсь", что вы пытаетесь поместить ярлык поверх кнопки, что вызывает вопрос "почему вы не используете кнопки встроенной поддержки изображений"?

Другие вопросы по тегам