gpt4 book ai didi

java - 在 JButton 上绘制图像?

转载 作者:行者123 更新时间:2023-12-02 06:14:21 25 4
gpt4 key购买 nike

我正在构建一个棋盘游戏,并且我有一个带有空圆圈的网格。

  • 我在 Photoshop 中创建了自己的单个空圆圈模板 (.png),并重复添加它(使用循环和布局管理器),并使用它创建多个按钮并将它们放置在面板上。

我还在 Photoshop 中创建了自定义圆形标记 (.png),然后在事件发生时它会“填充”或占据圆圈中的空白空间。我希望你明白我的意思。

我不完全确定使用 Paint() 是执行此操作的唯一方法。

有人可以给我一些关于如何实现这一目标的提示吗?我是 GUI 新手。

这就是我的网格的样子:

enter image description here

enter image description here

这些空白区域是我创建的标记必须占用的空间,但我不确定除了熟悉 Paint() 之外我还会这样做

这是 .png 文件,当用户单击按钮时,它将“填充”空白空间

enter image description here

最佳答案

看看这个是否有想法。它结合了 2 个图像以实现“最终逻辑”外观:

enter image description here

我懒得等待透明模板,所以我自己做了一个。 ;)

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.net.URL;
import javax.imageio.ImageIO;

class GameGrid {

public static BufferedImage getImage(BufferedImage image, boolean fill) {
int pad = 4;
BufferedImage temp = new BufferedImage(
image.getWidth()+2*pad,
image.getHeight()+2*pad,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = temp.createGraphics();
g.setColor(Color.MAGENTA.darker());
Ellipse2D.Double ellipse = new Ellipse2D.Double(
pad, pad, image.getWidth(), image.getHeight());
Rectangle2D.Double outline = new Rectangle2D.Double(
0, 0, image.getWidth()+(2*pad), image.getHeight()+(2*pad));
Area a = new Area(outline);
a.subtract(new Area(ellipse));
if (fill) {
g.drawImage(image,pad,pad,null);
}
g.setClip(a);
g.fillRect(0, 0, image.getWidth()+(2*pad), image.getHeight()+(2*pad));
g.dispose();

return temp;
}

public static void main(String[] args) throws Exception {
URL url = new URL("/image/t5MFE.png");
BufferedImage image = ImageIO.read(url);

final BufferedImage img1 = getImage(image, true);
final BufferedImage img2 = getImage(image, false);
Runnable r = new Runnable() {
@Override
public void run() {
JPanel gui = new JPanel(new GridLayout(0,3));

ActionListener al = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
b.setIcon(new ImageIcon(img2));
}
};

for (int ii=0; ii<9; ii++) {
JButton b = new JButton(new ImageIcon(img1));
b.setBackground(Color.RED);
//b.setContentAreaFilled(false);
b.setBorder(null);
b.addActionListener(al);
gui.add(b);
}

JOptionPane.showMessageDialog(null, gui);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}

关于java - 在 JButton 上绘制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21626699/

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