import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class FormArtillery extends JDialog { private JPanel artilleryPane; private JLabel speedLabel; private JLabel weightLabel; private JLabel colorLabel; private JPanel pictureBox; private JButton createButton; private JButton buttonUp; private JButton buttonDown; private JButton buttonLeft; private JButton buttonRight; private JButton createAdvancedButton; public JButton buttonSelect; private DrawingArtillery _artillery; private DrawingArtillery selectedArtillery; public FormArtillery() { this.setTitle("Artillery"); this.setContentPane(artilleryPane); createButton.addActionListener(e -> { Random rnd = new Random(); Color color = JColorChooser.showDialog(this, "Цвет", new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256))); if (color == null) { color = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)); } _artillery = new DrawingArtillery(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), color, rnd.nextInt(4, 7)); _artillery.setPosition(10 + rnd.nextInt(90), 10 + rnd.nextInt(90), pictureBox.getWidth(), pictureBox.getHeight()); speedLabel.setText(String.format("Скорость: %s", _artillery.getArtillery().getSpeed())); weightLabel.setText(String.format("Вес: %s", _artillery.getArtillery().getWeight())); colorLabel.setText(String.format("Цвет: %x", _artillery.getArtillery().getBodyColor().getRGB())); repaint(); }); pictureBox.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { if (_artillery != null) _artillery.changeBorders(pictureBox.getWidth(), pictureBox.getHeight()); repaint(); } }); buttonLeft.addActionListener(e -> { if (_artillery != null) _artillery.moveTransport(Direction.Left); repaint(); }); buttonRight.addActionListener(e -> { if (_artillery != null) _artillery.moveTransport(Direction.Right); repaint(); }); buttonUp.addActionListener(e -> { if (_artillery != null) _artillery.moveTransport(Direction.Up); repaint(); }); buttonDown.addActionListener(e -> { if (_artillery != null) _artillery.moveTransport(Direction.Down); repaint(); }); createAdvancedButton.addActionListener(e -> { Random rnd = new Random(); Color color = JColorChooser.showDialog(this, "Основной цвет", Color.white); if (color == null) { color = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)); } Color dopColor = JColorChooser.showDialog(this, "Дополнительный цвет", Color.white); if (dopColor == null) { dopColor = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)); } _artillery = new DrawingAdvancedArtillery( rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), color, rnd.nextInt(4, 7), dopColor, rnd.nextBoolean(), rnd.nextBoolean() ); _artillery.setPosition(10 + rnd.nextInt(90), 10 + rnd.nextInt(90), pictureBox.getWidth(), pictureBox.getHeight()); speedLabel.setText(String.format("Скорость: %s", _artillery.getArtillery().getSpeed())); weightLabel.setText(String.format("Вес: %s", _artillery.getArtillery().getWeight())); colorLabel.setText(String.format("Цвет: %x", _artillery.getArtillery().getBodyColor().getRGB())); repaint(); }); buttonSelect.addActionListener(e -> { selectedArtillery = _artillery; dispose(); }); } public FormArtillery(DrawingArtillery artillery) { this(); _artillery = artillery; repaint(); } public DrawingArtillery getSelectedArtillery() { return selectedArtillery; } @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) pictureBox.getGraphics(); if (_artillery != null) { _artillery.drawTransport(g2d); } } }