栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java swing应用程序中保留和删除多个图形对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java swing应用程序中保留和删除多个图形对象?

不要使用

getGraphics
,这不是自定义绘画的工作方式,有关更多详细信息,请参见“
AWT中的绘画”和“摇摆和
执行自定义绘画 ”

基本思想是,您需要某种

List
,您可以在其中添加每个形状。
mouseClicked
发生这种情况时,您遍历列表并检查单击的鼠标是否出现了其中一种形状,如果是,则将其从中删除
List
,如果没有,则在单击时创建一个新形状并添加它到
List

然后,您可以

List
paintComponent
方法内部使用它来物理绘制形状。

本示例扩展了您

ImagePanel
在自定义绘画中的添加

import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Shape;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.geom.Ellipse2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class Test {    public static void main(String[] args) {        new Test();    }    public Test() {        EventQueue.invokeLater(new Runnable() { @Override public void run() {     try {         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {         ex.printStackTrace();     }     Jframe frame = new Jframe("Testing");     frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);     frame.add(new DrawPane("/Volumes/Disk02/Dropbox/MegaTokyo/thumnails/0.jpg"));     frame.pack();     frame.setLocationRelativeTo(null);     frame.setVisible(true); }        });    }    public class ImagePanel extends JPanel {        private Image img;        public ImagePanel(String img, String str) { //this(new ImageIcon(img).getImage()); }        public ImagePanel(String path) { Image img = new ImageIcon(path).getImage(); this.img = img; try {     BufferedImage image = ImageIO.read(new File(path));     int rgb = image.getRGB(66, 52);     System.out.println("Colour is: " + rgb); } catch (IOException e) {     e.printStackTrace(); }        }        @Override        public Dimension getPreferredSize() { return img == null ? new Dimension(200, 200) : new Dimension(img.getWidth(this), img.getHeight(this));       }        @Override        public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img, 0, 0, null);        }    }    public class DrawPane extends ImagePanel {        private List<Shape> shapes;        public DrawPane(String img, String str) { super(img, str); init();        }        public DrawPane(String path) { super(path); init();        }        protected void init() { shapes = new ArrayList<>(25); addMouseListener(new MouseAdapter() {     @Override     public void mouseClicked(MouseEvent e) {         boolean clicked = false;         Iterator<Shape> it = shapes.iterator();         while (it.hasNext()) {  Shape shape = it.next();  if (shape.contains(e.getPoint())) {      it.remove();      clicked = true;      break;  }         }         if (!clicked) {  shapes.add(new Ellipse2D.Double(e.getX() - 10, e.getY() - 10, 20, 20));         }         repaint();     } });        }        @Override        public void paintComponent(Graphics g) { super.paintComponent(g);  Graphics2D g2d = (Graphics2D) g.create(); g2d.setColor(Color.RED); for (Shape shape : shapes) {     g2d.draw(shape); } g2d.dispose();        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号