Кафельные изображения в разгаре - PullRequest
4 голосов
/ 08 мая 2010

У меня есть задача подготовить два окна с качелями. Один содержит сетку квадратов со случайными числами в них. Через секунду мне нужно загрузить фрагменты мозаичного изображения, а затем показать их в правильном порядке, формируя мозаичное изображение.

Windows должна выглядеть так:

альтернативный текст http://img535.imageshack.us/img535/3129/lab8a.jpg

Хорошо, так как это кусать? Я использовал пару раз только для рисования двухмерных полилиний, поэтому в принципе я сейчас просто теоретически, что делать.

Ок, окно №1: Я начинаю с создания Jframe для окна. Тогда я делаю для цикла и в нем создать 16 JLabels со случайными числами в них? Как установить поля между каждой плиткой и целым окном?

Окно № 2: Итак, я начинаю то же самое, но вместо загрузки номеров я добавляю изображения? Теперь, как я могу загрузить изображение из файла, а затем установить его в качестве фона?

1 Ответ

12 голосов
/ 08 мая 2010

Следующий код размещает JLabels с помощью GridLayout. Аргументы для 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);
    }
}

enter image description here

...