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

  1. Написать приложение, которое выполняет анимацию изображения. Создать меню с командами Show picture, Choose, Animate, Stop, Quit. Команда Quit завершает работу приложения. При выборе команды Show picture в центре экрана рисуется объект, состоящий из нескольких графических примитивов. При выборе команды Choose открывается диалоговое окно, содержащее: -поле типа TextBox с меткой Speed для ввода скорости движения объекта; -группу Direction из двух переключателей (Up-Down, Left-Right) типа RadioButton для выбора направления движения; -кнопку типа Button. По команде Animate объект начинает перемещаться в выбранном направлении до края окна и обратно с заданной скоростью, по команде Stop — прекращает движение.Добавлено через 1 час 43 минуты Присутствуют незначительные наброски проекта.


textual

Код к задаче: «Анимация с фигурой - Java»

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.600 из 5



Похожие ответы
  1. Можете написать несколько строк кода, которые реагируют на нажатие клавиш? Напишу на русском, т.к. не совсем понимаю: public void keyPressed{ если нажали на кнопку "вверх" переменная х=1; если нажали на кнопку "вниз" переменная х=-1; если нажали на кнопку "вправо" переменная у=1; если нажали на кнопку "влево" переменная у=-1; } Помогите пожалуйста реализовать

  1. Господа, я поставил JTable на фрейм, сетку включил, первый столбец уменьшил, подскажите пожалуйста, как выравнить по центру текст в ячейках и поменять фон больших ячеек в шахматном порядке?

  1. Здравствуйте! Нужна помощь!Я программирую калькулятор и мне стало интересно каким образом можно вывести диалоговое окно, если в JTextField появилась, допустим цифра 30? Я пытался сделать вот так, но ничего не происходит, не пойму почему. Буду признателен за помощь)

  1. Как сделать, чтобы количество кликов отбражалось е в консоли, а в самом окне? Что добавить в код? Ответьте пожалуйста. Зарание спасибо.

  1. Хочу подсчитать количество кликов, это тестовый кусочек программы для другой проги. В чем собственно проблема. Имеется два класса: первый - где основная движуха Main, второй - класс для обработки события, в частности клика мышки. Если писать класс один за другим, то все работает в порядке, но в главном классе тогда нет доступа к переменной sum, в которой сохранено количество кликов. Если же поместить класс-обработчик внутрь главного класса, то переменная станет доступной, но почему-то в строке "MyMouse listener = new MyMouse();" выдается ошибка, подчеркнуто все что после знака равно. Пишет: "'Main.this' cannot be referenced from a static context". Объясните пожалуйста, что это значит и как решить эту проблему. Заранее благодарен.

  1. Есть код запроса в удаленную БД. Как сделать так, чтобы в случае любой ошибки в этом участке кода появлялось окно с ошибкой, или хотя бы со стандартной фразой любого содержания? Чтобы пользователь понял, что что-то не так.Кроме того, При нажатии на кнопку, выполняется этот класс и кнопка меняет свое лого. Класс и кнопка связаны ActionListener. Можно ли сделать так, чтобы в случае ошибки кнопка не менялась на другу. сам класс:

  1. Доброго времени суток! проблема такая, что при старте игры не хочет перерисовывается экран Вот класс JPannal'a Если активный игровой процесс, то рисуем его, иначе рисуем активное меню. Кликните здесь для просмотра всего текста

  1. Здравствуйте. Хочу освоить работу с swing'ом в ItelliJ IDEA. Для начала решил сделать там в редакторе пустую форму, и просто запустить ее. Вот код