5

スイング付きの2つのウィンドウを準備するタスクがあります。1つには、乱数を含む正方形のグリッドが含まれています。次に、タイル画像を読み込んで正しい順序で表示し、タイル画像を作成する必要があります。

Windowsは次のようになります。

代替テキストhttp://img535.imageshack.us/img535/3129/lab8a.jpg

さて、これを噛む方法は?スイングを数回使用して2Dポリラインを描画したことがあるので、基本的には理論的には今何をすべきかを説明します。

さて、ウィンドウ番号1:ウィンドウのJframeの作成から始めます。次に、forループを実行し、その中に乱数を含む16個のJLabelを作成しますか?各タイルとウィンドウ全体の間にマージンを設定するにはどうすればよいですか?

ウィンドウ番号2:同じように開始しますが、番号を読み込む代わりに画像を追加しますか?では、ファイルから画像を読み込んで、それを背景として設定するにはどうすればよいですか?

4

1 に答える 1

13

次のコードは、を使用してJLabelをレイアウトします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);
    }
}

ここに画像の説明を入力してください

于 2010-05-07T21:14:23.763 に答える