我一直在尝试使用Path2D类和鼠标侦听器为Java绘图程序创建钢笔工具,但结果令人困惑。该工具将工作几秒钟,但随后整个应用程序将冻结,必须关闭。(这里没有例外;程序只会冻结)。这是一个说明问题的SSCCE:
import java.awt.BasicStroke;
import java.awt.event.MouseAdapter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.geom.Path2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PenDemoPanel extends JPanel {
private Point start;
private Point stop;
private Shape shape;
public PenDemoPanel() {
setBackground(Color.white);
setPreferredSize(new Dimension(600, 600));
PathListener listener = new PathListener();
addMouseListener(listener);
addMouseMotionListener(listener);
}
public void paintComponent(Graphics gc) {
super.paintComponent(gc);
Graphics2D g2 = (Graphics2D) gc;
if (start != null && stop != null) {
BasicStroke stroke = new BasicStroke(1);
shape = stroke.createStrokedShape(shape);
g2.draw(shape);
g2.fill(shape);
}
}
private class PathListener
extends MouseAdapter {
public void mousePressed(MouseEvent event) {
start = event.getPoint();
Path2D path = new Path2D.Double();
shape = path;
}
public void mouseDragged(MouseEvent event) {
stop = event.getPoint();
Path2D path = (Path2D) shape;
path.moveTo(start.x, start.y);
path.lineTo(stop.x, stop.y);
shape = path;
start = stop;
repaint();
}
public void mouseReleased(MouseEvent event) {
Path2D path = (Path2D) shape;
path.closePath();
shape = path;
repaint();
}
}
public static void main(String[] args) {
PenDemoPanel shapes = new PenDemoPanel();
JFrame frame = new JFrame("PenDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(shapes);
frame.pack();
frame.setVisible(true);
}
}
我编写了自己的Path
类,在这里可以很好地工作,但是我想在Path2D类中使用一些其他功能。
我在这里做错什么了吗?还是Path2D无法执行我想做的事情?
任何帮助将不胜感激。
问题似乎出在将笔划形状分配回形状上。如果您避免这样做,请使用该应用程序。保持响应。可见
import java.awt.BasicStroke;
import java.awt.event.MouseAdapter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.geom.Path2D;
import javax.swing.*;
public class PenDemoPanel extends JPanel {
private Point start;
private Point stop;
private Shape shape;
public PenDemoPanel() {
setBackground(Color.white);
setPreferredSize(new Dimension(600, 600));
PathListener listener = new PathListener();
addMouseListener(listener);
addMouseMotionListener(listener);
}
public void paintComponent(Graphics gc) {
super.paintComponent(gc);
Graphics2D g2 = (Graphics2D) gc;
if (start != null && stop != null) {
BasicStroke stroke = new BasicStroke(1);
Shape strokedShape = stroke.createStrokedShape(shape);
g2.draw(strokedShape);
g2.fill(strokedShape);
}
}
private class PathListener
extends MouseAdapter {
public void mousePressed(MouseEvent event) {
start = event.getPoint();
Path2D path = new Path2D.Double();
shape = path;
}
public void mouseDragged(MouseEvent event) {
stop = event.getPoint();
Path2D path = (Path2D) shape;
path.moveTo(start.x, start.y);
path.lineTo(stop.x, stop.y);
shape = path;
start = stop;
repaint();
}
public void mouseReleased(MouseEvent event) {
Path2D path = (Path2D) shape;
try {
path.closePath();
} catch(Exception ingore) {
}
shape = path;
repaint();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
PenDemoPanel shapes = new PenDemoPanel();
JFrame frame = new JFrame("PenDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(shapes);
frame.pack();
frame.setVisible(true);
}
});
}
}
用钢笔工具绘制直线段 使用 “钢笔 ”工具可以绘制的最简单路径是直线,方法是通过单击 “钢笔 ”工具创建两个锚点。继续单击可创建由角点连接的直线段组成的路径。 单击钢笔工具将创建直线段。 1选择钢笔工具。 2将钢笔工具定位到所需的直线段起点并单击,以定义第一个锚点(不要拖动)。注:单击第二个锚点之前,您绘制的第一个线段将不可见。(在 Photoshop 中选择 “橡皮带 ”选项以预览路径段。)此外
Photoshop 提供多种钢笔工具以满足您的使用案例和创意样式: 通过弯度钢笔工具,可以直观地绘制曲线和直线段。 标准钢笔工具可用于精确绘制直线段和曲线。 自由钢笔工具可用于绘制路径,就像用铅笔在纸上绘图一样。 磁性钢笔选项可用于绘制与图像中定义的区域边缘对齐的路径。 使用 Shift+ P 组合键可循环切换钢笔组中的工具。 使用 Shift+P 组合键可循环切换钢笔工具 可以组合使用钢笔工具和
我使用以下方式安装Gatsbyjs: 它安装,然后当我试图创建一个新的网站,它显示一些错误。 我尝试了盖茨比新网站,但它显示了一些错误: PS C:\Users\Klawnny\Dropbox\react电子商务 gatsby-cli@2.7.53更新了一个包在46.004s PS C:\用户\克劳尼\Dropbox\电子商务与反应 文件C:\Users\Klawnny\AppData\Roami
...13。repo init-u https://github.com/freescale/fsl-community-bsp-platform-b fido @debian:~$/opt/poky/1.8+snapshot/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gc
当使用钢笔工具时,很难绘制路径,除非画布上有锚点。从 Illustrator CC 2014 版开始,“钢笔工具”会显示路径预览,即前一个锚点到指针当前位置的绘制路径。 使用钢笔工具单击一次画板绘制平滑点,并拖动鼠标以按要求创建手柄。 注意:当您使用钢笔工具绘制平滑点时,反向手柄始终相等且成对。拖动平滑点手柄时按住 Cmd/Ctrl 可创建长度不等的手柄(配对保持不变)。 松开鼠标按钮。当您在画板
我不太熟悉OpenLDAP,但我试图让一个本地实例工作,以便在开发中测试一个客户机,该客户机需要memberOf属性。 根据http://www.OpenLDAP.org/doc/admin24/guide.html#的说明,我已经在Centos7虚拟机上下载并安装了OpenLDAP,这是一个快速入门指南。我没有使用包管理来安装它。因为我使用的是2.4.45,所以它使用的是cn=config OL