Java Animate JLabel
Поэтому я создаю базовое приложение, в котором я хочу разместить JLabel в нижней части экрана, который начинается в левом нижнем углу и перемещается, стиль анимации в правый нижний угол за заданное время и статичное изображение в центре. , Для этого я создал JFrame с JPanel, используя BorderLayout. Существует JLabel с ImageIcon, добавленным в BorderLayout.CENTER, и JPanel в BorderLayout.SOUTH. Мой код, хотя он написан на скорую руку и далеко не красив:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.BorderFactory;
public class GameWindow extends JPanel{
private static JLabel mainWindow, arrowLabel, arrowBox;
protected static JFrame frame;
protected static JPanel arrows;
public static int x = 600;
public GameWindow(){
mainWindow = new JLabel("Center");
arrowLabel = new JLabel("Moving");
arrows = new JPanel();
arrows.setSize(600, 100);
arrows.setLayout(null);
arrowBox = new JLabel("");
arrowBox.setBounds(0, 0, 150, 100);
arrowBox.setPreferredSize(new Dimension(150, 100));
arrowBox.setBorder(BorderFactory.createLineBorder(Color.black));
arrows.add(arrowBox);
this.setSize(600,600);
this.setLayout(new BorderLayout());
this.add(mainWindow, BorderLayout.CENTER);
this.add(arrows, BorderLayout.SOUTH);
}
public static void main(String[] args)
{
GameWindow g = new GameWindow();
frame = new JFrame("Sword Sword Revolution");
frame.add(g);
frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Timer t = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
arrows.add(arrowLabel);
arrowLabel.setBounds(x, 100, 100, 100);
x-=50;
arrows.repaint();
frame.repaint();
}
});
t.start();
}
}
ImageIcon в центре JLabel выглядит нормально, а пустой JLabel с рамкой появляется внизу, но я не могу получить вторую JLabel с изображением стрелки, чтобы отобразиться на экране. В конце концов я переключусь на scheduleAtFixedRate, чтобы непрерывно перемещать JLabel, но сейчас я даже не могу заставить изображение появляться на экране.
Я также понимаю, что, скорее всего, я не смогу использовать FlowLayout для этого, так как я понимаю, что он не позволяет вам устанавливать расположение ваших компонентов. Я попытался использовать нулевую разметку, но с нулевой разметкой пустой JLabel с рамкой не появляется. Я едва могу разглядеть верхнюю часть границы у нижнего края рамки, но даже с помощью setLocation я не могу заставить ее появляться там, где я хочу.
Очевидно, мой мыслительный процесс имеет недостатки, поэтому любая помощь будет оценена.