Я пытаюсь создать экран игрового меню, используя 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);