gpt4 book ai didi

java - 想要一种用于像素编辑器的网格

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:25 24 4
gpt4 key购买 nike

我目前正在尝试开发一个基本的像素编辑器应用程序,以积累我的 Java 编程经验。我正在设计它,以便用户可以选择多个颜色选项,他们单击一个选项,然后可以拖动网格中的单元格并更改颜色(就像典型的图像编辑器一样,但每个网格都有一种对齐方式单元格)

知道什么 Java 组件(如果有的话)能够在 Java 中实现这种类型的网格吗?

我曾想过每个单元格都是一个 JButton,但这似乎非常低效,而且我认为如果不单独单击每个单元格(按钮)就不可能更改每个单元格(按钮)的颜色。

感谢任何帮助。

最佳答案

超过几百个组件就尴尬了。获得大像素的一种简单方法是使用 drawImage() 并缩放鼠标坐标,如图所示 herehere .这是一个简单的例子。

screenshot

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 = p.x * imgW / paneW;
int y = p.y * 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();
}
});
}
}

关于java - 想要一种用于像素编辑器的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2900801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com