Swing中的平铺图像

5
我有一个任务,需要使用swing准备两个窗口。其中一个包含方格网格和随机数字。在第二个窗口中,我需要加载平铺图像的碎片,然后按正确顺序显示它们,形成平铺图像。
窗口应该看起来像这样: alt text http://img535.imageshack.us/img535/3129/lab8a.jpg 好的,那么如何实现呢?我只用过swing几次来绘制一些2D折线,所以基本上我只是理论上知道该做什么。
好的,所以第一个窗口: 我从创建窗口的Jframe开始。然后我用for循环,在其中创建16个带有随机数字的JLabel?如何设置每个瓷砖之间和整个窗口之间的边距?
第二个窗口: 所以我开始相同的步骤,但是不是加载数字,而是添加图像?现在,我如何从文件中加载图像,然后将其设置为背景?

这个问题似乎不适合讨论,因为链接的图片已经消失了。 - Kijewski
1个回答

13
下面的代码使用GridLayout来排列JLabels。 GridLayout的参数分别是:行数、列数、水平间隙和垂直间隙。在下面的示例中,我在标签之间水平和垂直都留了3像素的间隔。
如果要使用图像而不是数字,则可以将ImageIcon传递给JLabel的构造函数。
但是,看起来你正在做一个游戏,用户应该能够点击方块。这意味着你可能应该使用按钮而不是标签,但这取决于你自己的选择 :-)
import java.awt.GridLayout;

import javax.swing.*;
import javax.swing.border.BevelBorder;


public class FrameTest {

    public static void main(String[] args) {
        final JFrame f = new JFrame("Frame Test");

        JPanel panel = new JPanel(new GridLayout(4, 4, 3, 3));

        for (int i = 0; i < 16; i++) {
            JLabel l = new JLabel("" + i, JLabel.CENTER);
            //JLabel l = new JLabel(new ImageIcon("image_file.png"), JLabel.CENTER);
            l.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
            l.setFont(l.getFont().deriveFont(20f));
            panel.add(l);
        }

        f.setContentPane(panel);
        f.setSize(200, 200);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接