Swing — создание тонированного прозрачного переднего плана при невозможности кликабельности фоновых элементов

#java #swing

#java #swing

Вопрос:

Итак, я создаю пользовательский интерфейс приложения Java с использованием Swing. В принципе, всякий раз, когда процесс завершается, я хочу иметь наложение, которое было бы несколько прозрачным с определенным оттенком, а на переднем плане отображался бы загружаемый gif. Фоновые элементы будут недоступны для просмотра, чтобы предотвратить одновременную загрузку / запуск любых других процессов. Единственная часть, с которой мне действительно нужна помощь, — это сделать тонированный фон и сделать элементы в фоновом режиме недоступными для кликабельности. В идеале я хочу, чтобы этот класс использовался как класс Util, который будет использоваться в другом случае, когда мне нужно будет запустить экран загрузки. Пока это мой код:

 package com.cervinakuy.game;

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class Overlay extends JFrame {

    private static final long serialVersionUID = 1L;

    public Overlay() {

        setUndecorated(true);
        setBackground(new Color(1.0f,1.0f,1.0f,0.5f));
        setAlwaysOnTop(true);
        getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);

        setVisible(true);
        pack();

    }

}
  

Ответ №1:

Вы можете делать то, что делаете, за исключением того, что вы будете использовать a modal JDialog вместо JFrame. Модальный диалог предотвращает передачу событий родительскому JFrame до тех пор, пока диалог не будет закрыт.

Другой подход заключается в использовании Glass Pane . Стеклянная панель может закрывать рамку. Затем вы можете перехватывать события мыши / клавиши, чтобы предотвратить дальнейшую обработку, пока стеклянная панель не будет удалена.

Проверьте Отключенную стеклянную панель для примера этого подхода.

Комментарии:

1. Не могли бы вы связать меня с тем, где вы узнали, как использовать модальный JDialog? Я никогда не использовал его и хотел бы узнать, как это сделать.

2. @Espin, ты пробовал API? API содержит ссылку на учебное пособие по Swing. В руководстве есть примеры для всех компонентов Swing.

3. Я не думаю, что понимаю, что вы имеете в виду, API? Учебное пособие? Я не понимаю.

4. API — это то, что вы используете для поиска всех классов и всех методов классов. Когда вы читаете API, в нем есть краткое описание того, что делает класс. Когда вы читаете API JDialog, вы также найдете ссылку на учебное пособие по Swing, в котором содержится более подробная информация и примеры кода.

5. О, хорошо, я думаю, я понял, что вы имеете в виду, я попробую это. Спасибо!