我正在制作一个需要为每个部分分配信息的拼图应用程序。这是一张照片。
在照片中,我刚刚将每个拼图块打印到屏幕上。
碎片是在显示之前生成的,碎片的数量不同。例如,我想要一个 9x9 块的拼图……所以我需要 9x9 或 81 个按钮……
选择后,按钮或片段会突出显示。选择时以及单击其他按钮(例如分配位置)时,将执行/处理比片数据和按钮的动作。一次只能选择一个按钮..
就数据和功能而言,我已经完成了所有工作。
我只需要弄清楚如何制作按钮并使它们可选择。
看看这个例子是否给你一些想法:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
class ImageButtonFun {
public static void main(String[] args) throws Exception {
URL url1 = new URL("http://i.stack.imgur.com/XZ4V5.jpg");
final BufferedImage img1 = ImageIO.read(url1);
URL url2 = new URL("http://i.stack.imgur.com/7bI1Y.jpg");
final BufferedImage img2 = ImageIO.read(url2);
final int sW = img2.getWidth();
final int sH = img2.getHeight();
final int tileW = 40;
final int tileH = 40;
Runnable r = new Runnable() {
@Override
public void run() {
JPanel gui = new JPanel(new GridLayout(8,12));
ButtonGroup bg = new ButtonGroup();
for (int jj=0; jj<sH/tileH; jj++) {
for (int ii=0; ii<sW/tileW; ii++) {
Image im1 = img1.getSubimage(ii*tileW, jj*tileH, tileW, tileH);
Image im2 = img2.getSubimage(ii*tileW, jj*tileH, tileW, tileH);
JToggleButton button = new JToggleButton(new ImageIcon(im1));
button.setSelected( (ii%2==0 && jj%2==0) || (ii%2==1 && jj%2==1));
button.setSelectedIcon(new ImageIcon(im2));
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setBorder(null);
bg.add(button); // ensure only one button is selected at a time
gui.add(button);
}
}
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);
}
}
这些图像在代码和标记问答的示例图像中看到。
一次只能选择一个按钮..
为此使用 a ButtonGroup
。
该
ButtonGroup
组件管理一组按钮的选中/未选中状态。对于组,ButtonGroup
实例保证一次只能选择一个按钮。