- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所示,我希望能够右键单击在 Jpanel 上绘制的线条。由于这些行不是组件,我不能简单地向它们添加 MouseListener。目前我正在使用以下代码在 Jpanel 上绘制线条:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (UserDrawnLine line : userDrawnLines) {
g.setColor(new Color(line.colorRValue,line.colorGValue, line.colorBValue));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(line.thickness));
g.drawLine(line.startPointX, line.startPointY, line.endPointX, line.endPointY);
}
}
这是我的 UserDrawnLine 类:
public class UserDrawnLine {
public int startPointX;
public int startPointY;
public int endPointX;
public int endPointY;
public int colorRValue;
public int colorGValue;
public int colorBValue;
public float thickness;
public UserDrawnLine(int startPointX, int startPointY, int endPointX, int endPointY, int colorRValue,int colorGValue,int colorBValue, float thickness) {
this.startPointX = startPointX;
this.startPointY = startPointY;
this.endPointX = endPointX;
this.endPointY = endPointY;
this.colorRValue=colorRValue;
this.colorBValue=colorBValue;
this.colorGValue=colorGValue;
this.thickness=thickness;
}
}
我一直在考虑存储线条所经过的点,然后当用户在其中一个点上单击 Jpanel 时做出相应的 react 。然而,这似乎不是最好的解决方案。还有更好的吗?
最佳答案
创建一个 Collection Lines,并使用 MouseListener
中的 MouseEvent
提供的 Point
,迭代 Collection 并检查该点是否位于每行行
上。您可能必须推出自己的 Line 类并实现 contains
方法(请注意,不能使用 Line2D,因为它的 contains 方法始终返回 false)。
要确定点P是否在线上:
距离(P, A) + 距离(P, < strong>B) = 距离(A,B)
其中A和B是线端点,P是测试点。可以使用误差项来允许靠近但不完全在线上的点(例如,当使用较宽的笔划进行渲染时,您可能希望增加此误差项)。假设您的类有端点 a 和 b:
public boolean contains(Point p, double error){
double dist = Math.sqrt(Math.pow(p.x - a.x, 2) + Math.pow(p.y - a.y, 2)) +
Math.sqrt(Math.pow(p.x - b.x, 2) + Math.pow(p.y - b.y, 2));
return Math.abs(dist - this.distance) <= error;
}
关于java - 如何将鼠标监听器添加到使用 Graphics.drawLine() 绘制的线条上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30244212/
在我的应用程序中,我需要绘制一个方程。绘制的方程将由许多小的直线组成。当我在 for 中使用 DrawLine 方法绘制它时,我获得了比使用 DrawLines 方法时更高的质量。 Graphics
我在 C++ 中使用 GDI+ 绘制图表控件。我想知道上述两个函数之间是否存在性能差异。我不懒惰为写代码DrawLines() 但正是这样做使我的代码变得复杂。所以我权衡是否以降低可读性和潜在增加错误
我有一个绘画程序,并且我已经完成了所有按钮和 slider ,但是我在实际绘画本身方面遇到了问题。当我将光标拖过屏幕而不是一条不间断的线时,我几乎得到了一条我不想要的虚线。以下是 JPanel 和 B
一般来说,对 Swing 和制作 GUI 有点陌生,我一直在使用 DrawLine 方法来创建“地板”,并且它一直在为 PaintComponent 类中的坐标变量本地工作,但是我想更改使用 acti
所以我将这个类放在一个 JPanel 实现类中。 private static class Line extends JComponent { private static final
我需要有关此代码的帮助。我的 g.drawLine(0,0,300,300) 不起作用。一直工作到周一,不知道出了什么问题。我使用 g.drawLine(0,0,300,300) 来在使用plota_
我正在创建一个随机绘制小行星的游戏(使小行星呈现锯齿状外观)。经过研究,我只发现你可以填充原始形状。有谁知道我可以用来填充这些形状的方法? package view.game_object; impo
我被 canvas.drawLines() 卡住了。 我的应用程序显示轨道 om map View ,但生成的线条很糟糕。有没有人看到这样的行为?即,线的宽度不同,甚至不是“正方形”,而是菱形,有时甚
我想知道,通常情况下,你们如何为从 Paint.drawLine 绘制的线投下阴影?据我所知,Paint.setShadowLayer 仅对 Paint.drawText 有影响,但对 Paint.d
开始在 Delphi 中使用 GDI+。需要画几条平滑的直线。例如试图在表格上画对角线(从左上角到右下角)但什么也没有出现。该代码有什么问题(Delphi XE3、Windows 10 x64)? u
我试图使用 alpha channel 通过 CustomPaint 对线条颜色应用透明度的Canvas.drawLine() . 问题 但是,alpha channel 上的颜色调整对结果没有影响,
这是我到目前为止的代码,其中包含一些打印行,只是为了确保它实际上进入了该方法。由于某种原因, Canvas 上没有绘制任何内容,我有一个与此类似的程序,就绘图而言,它工作得很好。这个有什么问题吗? i
我有一段代码需要绘制数千条线(6000 到 50000 之间)。 我随后修复了一个不相关的错误,暴露了一些有趣的东西;也就是说,当这些线条很长(比如 30k 像素)时,drawLine 函数会占用我的
我正在使用 C#.NET 3.5 在 Windows CE 中绘制一条指向 Graphics 对象的线。 我使用的代码如下所示: e.Graphics.DrawLine(new Pen(Color.F
我已经尝试了很多方法,但我的代码仍然拒绝在 Canvas 上简单地画一条线。我注释掉的每一次尝试要么使程序崩溃,要么不显示该行。我真的很难理解如何做到这一点,我不断收到关于使用线程或 onDraw 或
我正在用安卓开发游戏。我是初学者,所以我对android了解不多。我遇到了与 Canvas 相关的问题。我正在尝试设计包含圆网格(5 * 6)的板。 我想在它们之间显示线条,使它们看起来像盒子。为此,
问题:除了在输入点上画圆之外,还有什么更好的方法来实现在屏幕上画线的功能? 详细信息:我正在尝试编写一个基本上会画一条线的函数。但是该线不会是普通的彩色线。这条线会让用户通过那条线将一个图像的像素复制
import java.awt.event.*; import java.awt.*; import javax.swing.*; public class Line{ public static
我知道这很简单,但我不明白为什么单击按钮后 Form1 上没有绘制任何内容: namespace GeometryTest { public partial class Form1 : For
给定以下代码: import javax.swing.*; import java.awt.*; public class NewClass extends JPanel { public v
我是一名优秀的程序员,十分优秀!