Как сделать компонент AWT прозрачным на прогрессивном фоновом изображении?Используется Window (), Panel (), Button (), но не удалось - PullRequest
1 голос
/ 16 июля 2011

Как я могу сделать компонент AWT прозрачным, если фон является прогрессивным изображением?

Примечание: используется только AWT, где прогрессивное окно () 5 кадров в секунду.Panel () теперь не становится прозрачной при использовании нового цвета (255,0,0,0).Как сделать панель прозрачной?

enter image description here

AWT?здесь:

public class 888 extends Window 
{
    private Button button;

    public 888() 
    {
        super(new Frame());
        // Transparent failed
        getOwner().setBackground(new Color(255, 0, 0, 0) );

        this.setLayout (new BorderLayout ());

        button = new Button("close");

        button.setBackground(Color.RED);
        button.setSize(200,200);
        button.setLocation(0,20);

        this.add("North", button);

        Panel p = new Panel();
        //p.setOpaque(false);
        p.setSize(200,200);
        p.setLocation(400,400);
        // Transparent failed
        p.setBackground(new Color(255,0,0,0));
        p.add("Left", new Button("Test"));
        this.add("North", p);

        //AWTUtilities.setWindowOpacity(this, 0.2f); // Error in Linux

    }


    public static void main(String[] args) 
    {
        Window j = new 888();
        j.setVisible(true);
        //j.setBackground( new Color(255, 0, 0, 0) );
    }

}

SWing ?: здесь

public class 888 extends JWindow 
{
    private JButton button;

    public 888() 
    {
        //super(new Frame());
    // Transparent failed
        getOwner().setBackground(new Color(255, 0, 0, 0) ); 

        this.setLayout (new BorderLayout ());

        button = new JButton("close");

        button.setBackground(new Color(255,0,0,255));
        button.setSize(200,200);
        button.setLocation(0,20);

        this.add("North", button);

        JPanel p = new JPanel();
        //p.setOpaque(false);
        p.setSize(200,200);
        p.setLocation(400,400);
        // Transparent failed
        p.setBackground(new Color(255,0,0,0));
        p.add("Left", new Button("Test"));
        this.add("North", p);

        //AWTUtilities.setWindowOpacity(this, 0.2f); // Error in Linux

    }


    public static void main(String[] args) 
    {
        JWindow j = new 888();
        j.setVisible(true);
        //j.setBackground( new Color(255, 0, 0, 0) );
    }

}

Примечание: на самом деле ничего не работает, с Swing у меня возникают проблемы с JButton, потому что когдаJWindow обновляется, JButton становится невидимым.С помощью AWT, когда я использую кнопку и панель, никто не может установить ее прозрачность.

Как мне ее решить?Для прогрессивного фонового изображения Панель или Кнопка, чтобы сделать прозрачным?

Резюме:

Я пришел к точке сейчас после выполнения многих тестов, которые больше нигде не доступны.В основном в прогрессивной развертке Window () или JWindow ().Лучше использовать Awt для (без прозрачных объектов) и Swing для (прозрачных объектов).Не делайте вывод, как многие, что не следует использовать Awt и Swing, вы должны быть умными, чтобы смешать их, иначе закончится бесконечное лето 69:)

Ссылка:

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html http://java.sun.com/products/jfc/tsc/articles/threads/threads3.html

1 Ответ

1 голос
/ 16 июля 2011

Это ваш второй вопрос по этой теме, и я до сих пор не могу сказать, что вы делаете. Вы продолжаете говорить о фоновом изображении, но нигде в своем коде вы не показываете код для изображения.

Да, есть проблемы, когда вы используете setColor с альфа-значением 0. Вы НЕ должны этого делать. Правильное решение - просто сделать компонент непрозрачным.

См. Фон с прозрачностью для получения дополнительной информации.

Или, может быть, Фоновая панель - это то, что вы ищете.

Кроме того, использование ограничений является старым:

this.add("North", button); 

Прежде всего, вам не следует жестко кодировать значение ограничения. Во-вторых, если вы прочитаете API, вы увидите, что вы должны использовать:

this.add(button, BorderLayout.NORTH); 

и при использовании менеджеров компоновки вы не устанавливаете размер и местоположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...