Изменение цвета рисования с помощью Jbuttons

#java #swing

#java #качать

Вопрос:

Я создаю программу рисования Paint на Java, и я не могу понять, как назначить JButtons в коде для изменения цвета.

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Paint_program extends JFrame {
public Paint_program() {
    Controlcircle.MoveableMousePanel p = new Controlcircle.MoveableMousePanel();
    setLayout(new BorderLayout());
    add(new JPanel(), BorderLayout.NORTH);
    add(new JPanel(), BorderLayout.EAST);
    add(new JPanel(), BorderLayout.SOUTH);
    add(new JPanel(), BorderLayout.WEST);
    add(new JPanel(), BorderLayout.CENTER);
    add(p);

}

public class Controlcircle extends JFrame {
    JButton RedButton = new JButton("Red");
    JButton GreenButton = new JButton("Green");
    JButton BlueButton = new JButton("Blue");
    JButton EraserButton = new JButton("Eraser");
    JButton ClearButton = new JButton("Clear");
    CirclePanel draw = new CirclePanel();

    public Controlcircle() {
        JPanel Panel = new JPanel();
        Panel.add(RedButton);
        Panel.add(GreenButton);
        Panel.add(BlueButton);
        Panel.add(EraserButton);
        Panel.add(ClearButton);

        this.add(Panel, BorderLayout.SOUTH);

        RedButton.addActionListener(new listener());
        GreenButton.addActionListener(new listener());
        BlueButton.addActionListener(new listener());

    }

    class listener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            Color PColor = Color.BLACK;
            if (e.getSource() == RedButton) {
                PColor = Color.RED;
                repaint();
            }
        }
    }


    public static void main(String[] args) {
        Paint_program frame = new Paint_program();
        frame.setTitle("Paint Program");
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    class CirclePanel extends JPanel {
        private int radius = 5;
    }

    static class MoveableMousePanel extends JPanel {

        private int x = 20;
        private int y = 20;

        public MoveableMousePanel() {

            addMouseMotionListener(new MouseMotionListener() {
                public void mouseDragged(MouseEvent e) {
                    // Get the new location and repaint the screen
                    x = e.getX();
                    y = e.getY();
                    repaint(x, y, x, y);
                }

                public void mouseMoved(MouseEvent e) {
                }
            });
        }

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            g.drawLine(x, y, 4, 4);
        }
     }
  }
}
 

до сих пор я только пытался заставить красную кнопку работать, пытаясь использовать этот код

 class listener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            Color PColor = Color.BLACK;
            if (e.getSource() == RedButton) {
                PColor = Color.RED;
                repaint();
            }
        }
    }
 

но мне не повезло заставить его работать

(это мой первый пост здесь, поэтому, если я допустил какие-либо ошибки с форматом, пожалуйста, дайте мне знать для будущих вопросов.)

Комментарии:

1. 1) Имена переменных НЕ должны начинаться с символа верхнего регистра. 2) Имена классов ДОЛЖНЫ начинаться с символа верхнего регистра. Любой учебник или учебник будут следовать этим соглашениям. Найдите время, чтобы изучить их. 3) Вам необходимо сохранить текущий выбранный цвет, чтобы его можно было связать с объектом, который вы хотите нарисовать. Ознакомьтесь с пользовательскими подходами к рисованию для примера.

2. Вам нужна какая-то «модель», которая может поддерживать информацию о том, что должно быть нарисовано и как оно должно быть нарисовано

3. Взгляните на это простое объяснение рисования на Github.