我正在制作一个需要为每件作品分配信息的拼图应用程序。这是一张照片。
在照片中,我刚刚将每个拼图块打印到屏幕上。
在显示之前生成碎片,碎片的数量不同。例如我想要一个9x9件的拼图......所以我需要9x9或81个按钮......
选择后,按钮或片段会突出显示。选择此选项时,单击其他按钮(例如“分配位置”)时,将执行/处理“分配位置”而不是“分段数据”。一次只能选择一个按钮..
我已尽力处理数据和功能。
我只需要弄清楚如何制作按钮并使它们可以选择。
答案 0 :(得分:1)
看看这个例子是否给你一些想法:
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);
}
}
图像显示在Example images for code and mark-up Q&As。
一次只能选择一个按钮..
使用ButtonGroup
。
ButtonGroup
组件管理一组按钮的选定/未选定状态。对于该组,ButtonGroup
实例保证一次只能选择一个按钮。