可点击的图片按钮

时间:2013-10-28 14:14:34

标签: java image awt

我正在制作一个需要为每件作品分配信息的拼图应用程序。这是一张照片。

在照片中,我刚刚将每个拼图块打印到屏幕上。

在显示之前生成碎片,碎片的数量不同。例如我想要一个9x9件的拼图......所以我需要9x9或81个按钮......

选择后,按钮或片段会突出显示。选择此选项时,单击其他按钮(例如“分配位置”)时,将执行/处理“分配位置”而不是“分段数据”。一次只能选择一个按钮..

我已尽力处理数据和功能。

我只需要弄清楚如何制作按钮并使它们可以选择。

1 个答案:

答案 0 :(得分:1)

看看这个例子是否给你一些想法:

enter image description here

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实例保证一次只能选择一个按钮。