Java Swing Перекрытие элемента

376
26 января 2017, 02:20

Доброго времени суток. Как работает позиционирование элементов в Swing относительно слоев? Как сделать так,чтобы один элемент перекрыл другой? Существует ли какая-то функция?

Answer 1

Вы можете использовать JLayeredPane. Эта панель позволяет добавить слои на любую панель. Вот запускаемый пример.

public class LayeredPaneDemo extends JPanel {
    private LayeredPaneDemo() {
        setLayout(new BorderLayout());
        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(300, 310));
        Point origin = new Point(10, 20);
        String[] layerStrings = {"Red", "Green", "Blue"};
        Color[] layerColors = {Color.red, Color.green, Color.blue};
        for (int i = 0; i < layerStrings.length; i++) {
            JLabel label = createColoredLabel(layerStrings[i], layerColors[i], origin);
            layeredPane.add(label, new Integer(i));
            origin.x += 35;
            origin.y += 35;
        }
        add(layeredPane, BorderLayout.CENTER);
    }
    private JLabel createColoredLabel(String text, Color color, Point origin) {
        JLabel label = new JLabel(text);
        label.setVerticalAlignment(JLabel.TOP);
        label.setOpaque(true);
        label.setBackground(color);
        label.setForeground(Color.black);
        label.setBounds(origin.x, origin.y, 140, 140);
        return label;
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("LayeredPaneDemo");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            JComponent newContentPane = new LayeredPaneDemo();
            newContentPane.setOpaque(true);
            frame.setContentPane(newContentPane);
            frame.pack();
            frame.setVisible(true);
        });
    }
}

Это сокращенный вариант LayeredPaneDemo. Подробная документация The Layered Pane.

READ ALSO
Process type для telegram бота(Heroku Procfile, Java)

Process type для telegram бота(Heroku Procfile, Java)

В документации Heroku не нашёл исчерпывающей информации о том, какие бывают process types и с чем их едятПонял только, что их минимум три:

368
Почему выходит FileNotFoundException в jar файле

Почему выходит FileNotFoundException в jar файле

я хочу создать проект, в котором надо создать jar файлПроект в IntellijIdea работает, даже когда jar file внутри проекта, а когда перемещаю его в рабочий...

330
вопрос по кодировке java

вопрос по кодировке java

Здравствуйте,есть jsp страница в которой есть поле куда нужно вводить строку,передает это всё в сервлет который выводит этоНо если данные...

311
Сервлет на java

Сервлет на java

Есть сервлет на java:

354