java – 如何阻止JComponent清除?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何阻止JComponent清除?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2740字,纯文字阅读大概需要4分钟。
内容图文
我正在制作分子设计应用程序.我可以绘制线条和圆圈,但每次单击时它都会清除旧线条,所以基本上,你只能设计具有2个原子的分子.
此外,如果单击非常快,则mouseEvents不会传递,这也是一个问题.
这是代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class MoleculeDesigner extends JComponent implements MouseListener {
private Point op, cp;
private boolean first = true;
public static final Color linecolor = new Color(0, 255, 0);
private static final long serialVersionUID = 1L;
private BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
public MoleculeDesigner() {
JFrame f = new JFrame("Molecule Designer");
f.setBackground(Color.WHITE);
f.addMouseListener(this);
f.add(this);
f.setSize(100, 100);
f.setDefaultCloseOperation(3);
f.setVisible(true);
}
public static void main(String[] args) {
new MoleculeDesigner();
}
@Override
protected void paintComponent(Graphics g) {
if(op != null && cp != null) {
Graphics2D g2 = img.createGraphics();
super.paintComponent(g2);
g2.setColor(linecolor);
g2.drawLine((int) op.getX(), (int) op.getY(), (int) cp.getX(), (int) cp.getY());
g2.setColor(Color.BLACK);
g2.fillOval((int) cp.getX(), (int) cp.getY(), 10, 10);
op = (Point) cp.clone();
g2.dispose();
}
}
@Override
public Dimension getPreferredSize() {
return getParent().getMaximumSize();
}
@Override
public void mouseClicked(MouseEvent e) {
if(!first) {
cp = e.getPoint();
cp.setLocation(cp.getX(), cp.getY() - 8);
}
else {
op = e.getPoint();
first = false;
}
repaint();
}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
}
所有帮助赞赏!
解决方法:
要么1)绘制BufferedImage,然后将其显示在paintComponent覆盖内部,或者2)将数据放入ArrayList或其他集合中,然后遍历paintComponent内的集合.如果我将数据用于其他目的,我会做后者.此外,永远不要这样做:
public void update(Graphics g) {
paintComponent(g);
}
这不是Swing图形应该如何完成的,并且是潜在危险的代码.请阅读:
> Basic Swing Graphics Tutorial
> Advanced Swing Graphics Information
编辑
关于选项1的更多细节:
>使用其构造函数之一创建BufferedImage.
>在图像上绘图.
>当您需要绘制时,使用getGraphics()或createGrahpics()(对于Graphics2D对象)从BufferedImage获取Graphics对象
>使用此Graphics对象绘制
>然后dispose()Graphics对象.
>然后调用repaint()以要求JVM重新绘制组件.
>通过调用g.drawImage(…)在paintComponent方法中绘制图像,并传入缓冲的图像.
好处:通常绘图更快,我经常使用它来绘制背景图像.
缺点:数据点不可用,因此如果您需要对数据点进行操作或动画,这不是可行的方法.
内容总结
以上是互联网集市为您收集整理的java – 如何阻止JComponent清除?全部内容,希望文章能够帮你解决java – 如何阻止JComponent清除?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。