Анимация с фигурой - Java

Узнай цену своей работы

Формулировка задачи:

Написать приложение, которое выполняет анимацию изображения. Создать меню с командами Show picture, Choose, Animate, Stop, Quit. Команда Quit завершает работу приложения. При выборе команды Show picture в центре экрана рисуется объект, состоящий из нескольких графических примитивов. При выборе команды Choose открывается диалоговое окно, содержащее: -поле типа TextBox с меткой Speed для ввода скорости движения объекта; -группу Direction из двух переключателей (Up-Down, Left-Right) типа RadioButton для выбора направления движения; -кнопку типа Button. По команде Animate объект начинает перемещаться в выбранном направлении до края окна и обратно с заданной скоростью, по команде Stop — прекращает движение.
Присутствуют незначительные наброски проекта.
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButton;
 
public class Main {
 
    public static void main(String[] args){
        JFrame frame = new JFrame("Moving square");
        frame.setSize(new Dimension(600,400));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setLayout(new GridBagLayout());
        
        JFrame frame1 = new JFrame("Choose");
        frame1.setSize(new Dimension(400,100));
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLocationRelativeTo(null);
        frame1.setLayout(new GridBagLayout());
        
        JMenuBar menuBar = new JMenuBar();
        JMenuBar menuBar1 = new JMenuBar();
        
        JLabel label = new JLabel("Speed:");
        String str[] = {"1","2","3","4","5","10"};
        JComboBox combobox = new JComboBox(str);
        JRadioButton radiobutton1 = new JRadioButton("Up-Down");
        JRadioButton radiobutton2 = new JRadioButton("Left-Right");
        JButton button = new JButton("Ok");
        
        frame1.add(label);
        frame1.add(combobox);
        frame1.add(radiobutton1);
        frame1.add(radiobutton2);
        frame1.add(button);
        
        JMenu menu = new JMenu("Menu");
        
        JMenuItem showpicture = new JMenuItem("Show picture");
        JMenuItem choose = new JMenuItem("Choose");
        JMenuItem animate = new JMenuItem("Animate");
        JMenuItem stop = new JMenuItem("Stop");
        JMenuItem quit = new JMenuItem("Quit");
        
        menu.add(showpicture);
        menu.add(choose);
        menu.add(animate);
        menu.add(stop);
        menu.addSeparator();
        menu.add(quit);
        
        menuBar.add(menu);

        quit.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(1);
                
            }
        });

        choose.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                frame1.setJMenuBar(menuBar1);
                frame1.setVisible(true);
                
            }
        });
        
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }
    
}
Помогите с решением задачи...

Решение задачи: «Анимация с фигурой»

textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MainSpeed {
 
 
    private static JComboBox combobox;
    private static JRadioButton radiobutton1;
    private static JRadioButton radiobutton2;
    private static JButton button;
 
    private static class MyPanel extends JPanel {
        private boolean active = false;
        private boolean firstTime = true;
 
        private int x;
        private int y;
        private int dx;
        private int dy;
        private int speed;
 
        private final int TIMER_DELAY = 20;
        private final int SHAPE_SIZE = 50;
 
        private Timer timer;
 
        public MyPanel() {
            x = 0;
            y = 0;
            dx = 0;
            dy = 0;
            speed = 0;
            timer = new Timer(TIMER_DELAY, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    if (x < 0 || x > getWidth() - SHAPE_SIZE) {
                        dx = -dx;
                    }
                    if (y < 0 || y > getHeight() - SHAPE_SIZE) {
                        dy = -dy;
                    }
 
                    x += dx;
                    y += dy;
 
                    repaint();
                }
            });
 
 
        }
 
        @Override
        public void paint(Graphics g) {
            super.paint(g);
 
 
            if (active) {
                g.setColor(Color.BLUE);
                g.drawOval(x, y, SHAPE_SIZE, SHAPE_SIZE);
                g.fillOval(x, y, SHAPE_SIZE, SHAPE_SIZE);
            }
 
 
        }
 
        private void getParameters() {
            speed = Integer.parseInt((String) combobox.getSelectedItem());
            if (firstTime) { //
                x = getWidth() / 2;
                y = getHeight() / 2;
                firstTime = false;
            }
 
            if (radiobutton1.isSelected()) {
                if (dy > 0) {
                    dy = -speed;
                } else {
                    dy = speed;
                }
            } else {
                if (dy > 0) {
                    dy = speed;
                } else {
                    dy = -speed;
                }
            }
            if (radiobutton2.isSelected()) {
                if (dx > 0) {
                    dx = -speed;
                } else {
                    dx = speed;
                }
            } else {
                if (dx > 0) {
                    dx = speed;
                } else {
                    dx = -speed;
                }
            }
        }
 
    }
 
 
    public static void main(String[] args) {
        JFrame frame = new JFrame("Moving square");
        frame.setSize(new Dimension(600, 400));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
//        frame.setLayout(new GridBagLayout());
 
        JFrame frame1 = new JFrame("Choose");
        frame1.setSize(new Dimension(400, 100));
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLocationRelativeTo(null);
        frame1.setLayout(new GridBagLayout());
 
        JMenuBar menuBar = new JMenuBar();
        JMenuBar menuBar1 = new JMenuBar();
 
        JLabel label = new JLabel("Speed:");
        String str[] = {"1", "2", "3", "4", "5", "10"};
        combobox = new JComboBox(str);
        radiobutton1 = new JRadioButton("Up-Down");
        radiobutton2 = new JRadioButton("Left-Right");
        button = new JButton("Ok");
 
        frame1.add(label);
        frame1.add(combobox);
        frame1.add(radiobutton1);
        frame1.add(radiobutton2);
        frame1.add(button);
 
 
        MyPanel panel = new MyPanel();
        panel.setBackground(Color.white);
        frame.add(panel, BorderLayout.CENTER);
 
 
        JMenu menu = new JMenu("Menu");
 
        JMenuItem showpicture = new JMenuItem("Show picture");
        JMenuItem choose = new JMenuItem("Choose");
        JMenuItem animate = new JMenuItem("Animate");
        JMenuItem stop = new JMenuItem("Stop");
        JMenuItem quit = new JMenuItem("Quit");
 
        menu.add(showpicture);
        menu.add(choose);
        menu.add(animate);
        menu.add(stop);
        menu.addSeparator();
        menu.add(quit);
 
        menuBar.add(menu);
 
 
        button.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
//                frame1.setVisible(false);
                panel.getParameters();
                panel.repaint();
            }
        });
 
 
        quit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(1);
 
            }
        });
 
 
        choose.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                frame1.setJMenuBar(menuBar1);
                frame1.setVisible(true);
 
 
            }
        });
 
        animate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!panel.timer.isRunning()) {
                    panel.timer.start();
                }
                frame.repaint();
            }
        });
 
        stop.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (panel.timer.isRunning()) {
                    panel.timer.stop();
                }
                frame.repaint();
            }
        });
 
 
        showpicture.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (panel.active) {
                    panel.active = false;
                } else {
 
                    panel.active = true;
                    if (panel.firstTime) {
                        panel.getParameters();
                    }
                }
                frame.repaint();
            }
        });
 
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5