Отключить сенсорные индикаторы в JFrame - PullRequest
2 голосов
/ 12 апреля 2019

Я разрабатываю приложение для рисования на Swing, которое должно хорошо работать с Windows Touch.Когда пользователь касается JFrame, на экране появляются бесполезные сенсорные индикаторы.Худшим из них является квадратный индикатор с длинным нажатием, который обычно производит щелчок правой кнопкой мыши и открывает контекстное меню.

Большинство приложений рисования в Windows не отображают сенсорные индикаторы - к ним относятся paint.net,Penbook, SketchBook и Spirality.

Можно ли отключить эти сбивающие с толку индикаторы в моем приложении Swing?

Screencast showing unwanted indicators

Вот код, используемыйна скриншоте выше:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import java.util.ArrayList;

public class FingerPaint extends JPanel {
    Point lastPoint;
    ArrayList<Line2D> lines = new ArrayList<>();

    public FingerPaint() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                lastPoint = e.getPoint();
            }
        });
        addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                Point p = e.getPoint();
                lines.add(new Line2D.Double(lastPoint, p));
                lastPoint = p;
                repaint();
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;

        // clear background
        g2.setColor(Color.white);
        g2.fill(g.getClip());

        // paint segments
        g2.setColor(Color.magenta);
        g2.setStroke(new BasicStroke(3));
        for (Line2D line : lines) {
            g2.draw(line);
        }
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(() -> {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            f.getContentPane().add(new FingerPaint());
            f.setSize(320, 240);
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        });
    }
}
...