java swing 画多边形_我想使用Swing绘制几个点 - java

这篇博客介绍了如何使用Java Swing在面板上绘制多边形,并处理鼠标点击事件。作者首先讨论了如何在JPanel上显示背景图像,接着解释了如何获取鼠标点击位置,最后展示了如何在面板上画点。示例代码提供了实现这些功能的基础框架。
摘要由CSDN通过智能技术生成

...在图像中,并对其[x y]坐标进行一些计算。

我的第一个想法是使用图像作为JPanel的背景,然后注册这些点,但是我不确定是否有办法在JPanel上标记这些点。还有一个我不熟悉的图形库,但是我不确定是否可以将它们与Swing结合使用。

您能给我命名我可以用来完成任务的软件包/类吗?也欢迎引用已经完成的代码。

谢谢!

java大神给出的解决方案

这里的问题有三点:

需要一种显示背景图像的方法。

必须能够找到单击鼠标的位置。

必须有一种在面板上画点的方法。

实现以上几点的一种方法是将JPanel子类化并提供这些功能。

1.在面板中显示背景图像。

首先,由于JPanel默认情况下没有显示背景图像的方法,因此必须有一种方法可以将图像保存在JPanel中,然后在面板上绘制该图像,这可以通过paintComponent方法。

实现此目的的一种方法是在类中具有一个字段,该字段保留Image进行绘制:

class MyPanel extends JPanel {

// Background image. Initialize appropriately.

Image backgroundImage;

public void paintComponent(Graphics g) {

super.paintComponent(g);

// Draw background image each time the panel is repainted.

g.drawImage(backgroundImage, 0, 0, null);

}

}

Graphics中的paintComponent对象与MyPanel关联,可用于执行图形操作。

2.查找单击鼠标的位置。

其次,为了获取单击鼠标的位置,可以将MouseListener分配给MyPanel。在下面的示例中,扩展了MouseAdapter的匿名内部类用于最大程度地减少编写额外的代码:

class MyPanel extends JPanel {

// Background image. Initialize appropriately.

Image backgroundImage;

public MyPanel() {

// Add a MouseListener which processes mouse clicks.

this.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

// Process mouse-click.

}

})

}

// paintComponents method here.

}

mouseClicked方法中可以包含单击鼠标时需要执行的处理。

3.如何在面板上画点。

第三,为了找到单击鼠标的点,可以从通过MouseEvent方法传入的mouseClicked对象中获得鼠标:

class MyPanel extends JPanel {

// Background image. Initialize appropriately.

Image backgroundImage;

Point pointClicked;

public MyPanel() {

// Add a MouseListener which processes mouse clicks.

this.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

// Retrieve the point at which the mouse was clicked.

pointClicked = e.getPoint();

// Repaint the panel.

this.repaint();

}

})

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

// Draw background image each time the panel is repainted.

g.drawImage(backgroundImage, 0, 0, null);

// Draw a little square at where the mouse was clicked.

g.fillRect(pointClicked.x, pointClicked.y, 1, 1);

}

}

尽管上面的代码没有经过测试,但它应该是一个起点。

例如,如果需要绘制多个点,则可以使用List来保存这些点,然后绘制Point方法中的每个paintComponents。

如果单击鼠标时需要执行其他处理,则可以将其他代码添加到mouseClicked方法中。

其他资源:

Lesson: Performing Custom Painting

Painting in AWT and Swing

How to Write a Mouse Listener

感谢zedoo在注释中指出在重写super.paintComponent方法时应执行对paintComponent的调用。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…如何使用BorderLayout(Java)扩展JTextField - java

我有一个Java程序,其中使用的是JTextField,但如果我未指定默认大小,则其宽度为0。我将其插入BorderLayout中,因此如何制作它展开以填充整个容器? java大神给出的解决方案 在上面的示例中,文本字段将正常工作。但是,如果您插入EAST或WEST,则将不起作用。import java.awt.BorderLayout; import ja…JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值