Мигание кнопок при наложении панели GIF - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать экран игрового меню, используя JLabel, чтобы держать GIF и добавить его к JFrame.

Я создал JPanel, который удерживает кнопки меню в качестве наложения, чтобы обеспечить фоновую анимацию. Это работает, когда я добавляю изображение или устанавливаю цвет фона рамки. Однако, когда я использую GIF вместо PNG, кнопки на панели наложения мерцают (они отображаются только при наведении на них курсора мыши, а затем мерцают).

Я пролистал некоторые возможные решения, включая repaint() и использование BufferedStrategy, но мне не повезло; Ничего не изменилось. В меню используется CardLayout, и я добавляю панель кнопок меню к кадру при запуске, переход на другие панели работает нормально даже при мерцании, и GIF работает на всех панелях.

GIF Я использую это здесь

//My constructor
public TitleScreen() throws Exception{  
        panel.setLayout(layout);
        setPreferredSize(new Dimension(480,480));
        layout.addLayoutComponent(panel, "Menu");
        addButtons();
        getClip("kala.wav");
        setLocationRelativeTo(null);
        setResizable(false);
        setUndecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
//I know I should really use a try catch but at the moment I'm just testing functionality and clean up code at a later date
//This is how I set the gif
    public void addButtons() throws Exception{
        ImageIcon image = new ImageIcon("ember.gif");
        JLabel background = new JLabel(image);
        background.setSize(480, 480);
        this.add(background);
//This is how I create and add my buttons
        back.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                layout.show(panel, "Menu");
            }

        });
        back.setFont(font);
        back.setForeground(Color.WHITE);
        back.setText("Return");
        back.setContentAreaFilled(false);
        back.setBorder(null);
//control is another panel that will contain controls for playing the game      
        control.add(back,BorderLayout.SOUTH);
...