在我的应用程序中,我有一个可以绘画的JPanel。这是通过记录鼠标单击和鼠标拖动事件中的三个点,然后在这三个点之间绘制折线来完成的。但是,如果我使用我的平板电脑绘制,线条不是很平滑。我看到的最大的问题是,如果我快速抚摸笔,该程序甚至不会划线。如果我走得有点慢,那么它就会划清界限,但它会落后,所以我无法看到它被绘制的线条。我怎样才能使这个变得更加流畅,就像在一张纸条中那样,无论我用笔划动多快,它都会画出我的线条?
以下是我一直在使用的代码,有人需要它
public class ScratchPad extends JPanel {
private Image image;
private Graphics2D graphics;
private ArrayList<Integer[]> coordinates = new ArrayList<>();
public ScratchPad() {
setPreferredSize(new Dimension(1000, 500));
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent me) {
Integer[] coord = {me.getX(), me.getY()};
coordinates.add(coord);
}
@Override
public void mouseReleased(MouseEvent me) {
coordinates.clear();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent me) {
Integer[] coord = {me.getX(), me.getY()};
coordinates.add(coord);
if (coordinates.size() >= 3) {
if (graphics != null) {
drawLine();
repaint();
}
}
}
});
}
private void drawLine() {
int[] x = {coordinates.get(0)[0], coordinates.get(1)[0], coordinates.get(2)[0]};
int[] y = {coordinates.get(0)[1], coordinates.get(1)[1], coordinates.get(2)[1]};
graphics.drawPolyline(x, y, 3);
Integer[] temp = {coordinates.get(2)[0], coordinates.get(2)[1]};
coordinates.clear();
coordinates.add(temp);
}
@Override
protected void paintComponent(Graphics g) {
if (image == null) {
// image to draw null ==> we create
image = createImage(getSize().width, getSize().height);
graphics = (Graphics2D) image.getGraphics();
// enable antialiasing
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// clear draw area
clear();
}
g.drawImage(image, 0, 0, null);
}
public void clear() {
graphics.setPaint(Color.white);
// draw white on entire draw area to clear
graphics.fillRect(0, 0, getSize().width, getSize().height);
graphics.setPaint(Color.black);
repaint();
}
}
编辑:添加图片以显示正在发生的事情。此图片的代码是MadProgrammer在下面的评论中的第二个例子。这里的主要问题是Java没有检测到鼠标拖动的一部分。我先绘制垂直线,然后从垂直线的顶部开始绘制水平线。正如您在图像中看到的那样,水平线并未立即从垂直线开始;它留下了一个空白。当我尝试用我的Wacom平板电脑而不是用鼠标绘图时,这个间隙才会出现。这是我此时试图解决的主要问题。我将在这个绘图工具中编写日文汉字,它具有根本不显示的小笔画!我必须让它们变得不必要,以便Java可以绘制它们。
答案 0 :(得分:0)
如果您使用wacom笔在其他应用程序中是否相当快?,如果没有,请尝试以下修复程序:
https://boutiqueretouching.com/fix-wacom-lag/
A)Wacom首选项应用程序->映射->使用Windows墨水(关闭)
B)搜索->轻弹->打开和关闭轻弹->取消选中使用轻弹
C)转到Windows设置–>设备–>笔/“笔和触摸设置->关闭”显示视觉效果”和“显示光标”。