Création d'une grille de pixels en Java
Pour les éditeurs de pixels en herbe, concevoir un système de grille permettant une manipulation précise des couleurs peut être intimidant. Cependant, Java propose des composants utiles qui peuvent rationaliser le processus.
JButton en tant que cellule de grille
Au départ, utiliser JButtons comme cellules de grille peut sembler inefficace. Bien que cela permette la modification de cellules individuelles, cela devient fastidieux lorsque vous travaillez avec de nombreuses cellules.
Implémentation de grille alternative
Une solution plus efficace consiste à utiliser la méthode drawImage() et mettre à l'échelle les coordonnées de la souris. Cette technique crée des « pixels » plus grands tout en conservant un comportement de type grille.
Exemple de code
Le code suivant illustre cette approche :
<code class="java">import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; public class Grid extends JPanel implements MouseMotionListener { private BufferedImage img; private int imgW, imgH, paneW, paneH; public Grid(String name) { super(true); // Load an image icon Icon icon = UIManager.getIcon(name); imgW = icon.getIconWidth(); imgH = icon.getIconHeight(); // Calculate panel dimensions this.setPreferredSize(new Dimension(imgW * 10, imgH * 10)); // Create an image buffer img = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // Draw the icon to the buffer Graphics2D g2d = (Graphics2D) img.getGraphics(); icon.paintIcon(null, g2d, 0, 0); g2d.dispose(); // Register mouse motion listener this.addMouseMotionListener(this); } @Override protected void paintComponent(Graphics g) { paneW = this.getWidth(); paneH = this.getHeight(); // Draw the buffered image g.drawImage(img, 0, 0, paneW, paneH, null); } @Override public void mouseMoved(MouseEvent e) { // Scale mouse coordinates based on panel dimensions Point p = e.getPoint(); int x = p.x * imgW / paneW; int y = p.y * imgH / paneH; // Retrieve and display color information at the grid location int c = img.getRGB(x, y); this.setToolTipText(x + "," + y + ": " + String.format("%08X", c)); } @Override public void mouseDragged(MouseEvent e) { } public static void main(String[] args) { // Create a JFrame and add the Grid panel JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new Grid("Tree.closedIcon")); f.pack(); f.setVisible(true); } }</code>
Utilisation
Résultat
La grille s'affichera, permettant aux utilisateurs de déplacer la souris sur l'image pixélisée tout en obtenant des informations de couleur pour chaque cellule.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!