编程プログラミングの熟練度を高めるために、開発者はピクセル エディターなどの基本的なアプリケーションの作成に着手することがよくあります。ピクセル エディタのコア機能には、一般的なイメージ エディタと同様に、ユーザーが色を選択し、キャンバス上のグリッド セルを変更することが含まれます。
頻繁に生じる質問の 1 つは、このようなグリッドベースのオブジェクトを実装するための Java コンポーネントの最適な選択です。システム。 JButton を個々のセルとして使用するのは直感的に見えるかもしれませんが、特に大きなグリッドの場合、非効率的で非実用的になる可能性があります。
幸いなことに、より効率的なアプローチが存在します。開発者は、drawImage() メソッドを利用し、マウス座標をスケーリングすることで、かなりのサイズのピクセルを作成できます。
この手法を実証するために、次の例を考えてみましょう。
Grid.java
<code class="java">// Import required Java library 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; /** * This class extends JPanel to create a grid-based pixel editor. * @see <a href="https://stackoverflow.com/questions/2900801">Original question</a> */ public class Grid extends JPanel implements MouseMotionListener { // Create buffered image for drawing private final BufferedImage img; // Image and panel dimensions private int imgW, imgH, paneW, paneH; public Grid(String name) { // Initialize basic attributes super(true); // Get the image icon and its dimensions Icon icon = UIManager.getIcon(name); imgW = icon.getIconWidth(); imgH = icon.getIconHeight(); // Set preferred size for the panel this.setPreferredSize(new Dimension(imgW * 10, imgH * 10)); // Create a BufferedImage for the image img = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB); // Get Graphics2D object for drawing Graphics2D g2d = (Graphics2D) img.getGraphics(); // Draw the image icon on the BufferedImage icon.paintIcon(null, g2d, 0, 0); // Dispose the Graphics2D object g2d.dispose(); // Add MouseMotionListener to the panel this.addMouseMotionListener(this); } @Override protected void paintComponent(Graphics g) { // Get current panel dimensions paneW = this.getWidth(); paneH = this.getHeight(); // Draw the image on the panel with scaling g.drawImage(img, 0, 0, paneW, paneH, null); } @Override public void mouseMoved(MouseEvent e) { // Calculate mouse coordinates scaled to image size Point p = e.getPoint(); int x = p.x * imgW / paneW; int y = p.y * imgH / paneH; // Get the pixel color at the calculated scaled coordinates int c = img.getRGB(x, y); // Set tooltip text with color information this.setToolTipText(x + "," + y + ": " + String.format("%08X", c)); } @Override public void mouseDragged(MouseEvent e) { // Mouse drag functionality is not implemented in this example } // Helper method to create the GUI 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); } // Main method to run the application public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { create(); } }); } }</code>
この技術を利用することで、開発者は大規模でスケーラブルなグリッドを備えたピクセル エディタを簡単に作成でき、効率を維持しながらユーザー エクスペリエンスを向上させることができます。
以上が各セルの JButton に依存せずに、特に大規模なグリッドの場合に、グリッド ベースのピクセル エディタを Java で効率的に実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。