Нарисуйте точку при щелчке мыши с помощью Java Swing

Я работаю над проектом, в котором я пытаюсь нарисовать точку щелчком мыши в JPanel с Java Swing.

Я сохраняю каждый раз, когда щелкнутые точки координируются в currentX и currentY, и создаю список Ellipse2D с этими координатами, но это не работает.

Используйте метод mousePressed или mouseReleased вместо метода mouseClicked. Ваш двойной щелчок должен иметь чрезвычайно точное время.

Gilbert Le Blanc 02.05.2022 14:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это, и это работает! Ниже решения:

package progetto;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author Anna
 */
public class MapDrawer extends JPanel{
    
    private List<Point> points = new ArrayList<>();
    
    public MapDrawer(){
        setBackground(new Color(23,99,8));
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e){
                points.add(new Point(e.getX(), e.getY()));
                repaint();
            }
        });
    }
    
    @Override
    public void paintComponent (Graphics g){
        super.paintComponent(g);
        Graphics g2 = (Graphics2D) g;
        g2.setColor(Color.gray);
        for (Point p : points){
            g2.fillOval(p.x, p.y, 5, 5);
        }
    }
    
    public static void main(String [] args){
        EventQueue.invokeLater(new Runnable(){
            @Override
            public void run(){
                JFrame frame = new JFrame();
                frame.add(new MapDrawer());
                frame.setSize(400,400);
                frame.setVisible(true);
            }
        });
    }
    
    
}

Ваш класс MapDrawer должен переопределить метод getPreferredSize(), чтобы вернуть желаемый размер вашей пользовательской панели. Затем, после того как вы добавите панель в фрейм и перед тем, как сделать фрейм видимым, вы вызовете pack() для фрейма. Теперь все компоненты будут отображаться в нужном размере, включая строку заголовка и границы фрейма.

camickr 02.05.2022 15:57

Другие вопросы по теме