想要一个像素编辑器的网格types
我目前正在尝试开发一个基本的像素编辑器应用程序来build立我的Java编程经验。 我正在devise它,所以用户有几个颜色选项,他们点击一个选项,然后他们可以拖动网格中的单元格,他们改变颜色(像一个典型的图像编辑器,但有一种捕捉到每个网格细胞)
什么样的Java组件,如果有的话,能够在Java中实现这种types的网格?
我曾经想过每个单元格都是JButton,但是这看起来效率非常低,我不认为每个单元格(button)的颜色都可以单独更改。
任何帮助赞赏。
超过几百个组件是尴尬的。 获得大像素的一个简单方法是使用drawImage()
并相应地缩放鼠标坐标。 这是一个简单的例子。
import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; /** @see http://stackoverflow.com/questions/2900801 */ public class Grid extends JPanel implements MouseMotionListener { private final BufferedImage img; private int imgW, imgH, paneW, paneH; public Grid(String name) { super(true); Icon icon = UIManager.getIcon(name); imgW = icon.getIconWidth(); imgH = icon.getIconHeight(); this.setPreferredSize(new Dimension(imgW * 10, imgH * 10)); img = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = (Graphics2D) img.getGraphics(); icon.paintIcon(null, g2d, 0, 0); g2d.dispose(); this.addMouseMotionListener(this); } @Override protected void paintComponent(Graphics g) { paneW = this.getWidth(); paneH = this.getHeight(); g.drawImage(img, 0, 0, paneW, paneH, null); } @Override public void mouseMoved(MouseEvent e) { Point p = e.getPoint(); int x = px * imgW / paneW; int y = py * imgH / paneH; int c = img.getRGB(x, y); this.setToolTipText(x + "," + y + ": " + String.format("%08X", c)); } @Override public void mouseDragged(MouseEvent e) { } private static void create() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new Grid("Tree.closedIcon")); f.pack(); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { create(); } }); } }
一个选项是使用一个大的canvas,并拦截事件。 在绘画(g)方法中绘制任何你需要的东西。