2回目の質問させて頂きます。
java勉強中の初級者です。
前回乱数を重複させずに5行×5列の25個並べる方法を教えて頂きました。
この25個にボタンをつけて最終的にタッチナンバーのゲームを作りたいです。
(ランダムに並んだ数字1~25まで順番に押してくゲーム)
5行×5列のボタンを配置まではできたのですが、
(1)そのボタンそれぞれに毎回違う乱数と紐付ける方法
(2)1~25まで順番に押してく処理
(3)そのボタンにその都度の数字に合わせた画像を付ける方法(押したら押された時用の画像に変わる)
上の3つが今悩んでいて、今回お聞きしたいところです。
(2)はifを使って
『25は24を押した後じゃないと押せない、24は23を押した後じゃないと押せない。』
みたいに一つずつ処理していくのかなぁと言うイメージです。
(合ってるのか効率いいのかもわかりませんが。)
(3)はこの数字が来たらこの画像、あらかじめ指定しておくのかな?と言うイメージです。
(これも合ってるのかすらわかりません。)
前回教えて頂いたソースコードを載せておきます。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Formatter;
import java.util.List;
class RandomArray {
public static void main(String[] args) {
int n = 5;
int[][] a = new int[n][n];
List<Integer> shuffled = new ArrayList<Integer>();
// initialize
for (int i = 0; i < n * n; i++)
shuffled.add(i + 1);
// shuffle
Collections.shuffle(shuffled);
System.out.println("shuffled: " + shuffled);
// set
int c = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
a[i][j] = shuffled.get(c++);
// output
StringBuilder sb = new StringBuilder();
Formatter f = new Formatter(sb);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
f.format("%2d ", a[i][j]);
f.format("\n");
}
System.out.print(f);
}
}
やりかた、考え方でもありがたいのですが、ソースコードも教えて頂けたら大変ありがたいです。
ぜひご教授頂きたいです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
補足への回答です。
たぶん、それで良いです。もしかしたら、try-catch で挟まないといけないかもしれませんが。(ファイル入力があるため)
今のところ、画像ファイルはソースと同じフォルダに置きます。
ボタンは、コンストラクタに、数字が指定されて初期化されるので、
半自動的に画像ファイルの名前を選択しています。
当然、その画像ファイルは自前で用意する必要があります。これが一番面倒だと思います。
No.4
- 回答日時:
横から失礼します
>1.png、2.png、...25.png
>1_off.png、2_off.png、... 25_off.png
>というのはどの部分に入れていくのでしょうか。
JButton には
setIcon
setPressedIcon
setSelectedIcon
setRolloverIcon
setRolloverSelectedIcon
setDisabledIcon
setDisabledSelectedIcon
など、Iconを設定する細かいメソッドがたくさんありますので、それらを活用した方が簡単だと思いますよ
ご回答ありがとうございます!
そちらのメソッド調べてしてみます!
何度も教えてくださった方がいるのでそちらの方をベストアンサーにさせて頂きました。
また何かで質問を出すと思いますので機会がありましたらよろしくお願いします。
No.2
- 回答日時:
画像ファイルがないので、試していませんが。
JButton のコンストラクタに、
new JButton(Icon icon)
というのがあるので、
super("" + number);
を、
super(new ImageIcom("" + number + ".png"));
のように変更すれば良いと思います。この場合、1.png、2.png、...
を、アイコン画像として使用します。
同じように、マウスクリック時のアクションを登録しているところで、
バックグラウンドの色を変更するのではなく、
b.setIcon(new ImageIcon("" + number + "_off.png"));
とします。1_off.png、2_off.png、... の画像に変更するわけです。
この回答への補足
public void mouseClicked(MouseEvent e) {
if (pressed[b.getNumber() - 1]) {
b.setIcon(new ImageIcon("" + number + "_off.png"));
b.setEnabled(false);
pressed[b.getNumber()] = true;
}
}
public NumberdButton(int number) {
super(new ImageIcom("" + number + ".png"));
this.number = number;
}
でよいのでしょうか。
1.png、2.png、...25.png
1_off.png、2_off.png、... 25_off.png
というのはどの部分に入れていくのでしょうか。
質問ばかりで恥ずかしいですが、ご教授お願いします。
No.1
- 回答日時:
GUI はあまり得意ではありません。
例えば、こんな感じでしょうか。
PressButtonToOrder.java という名前で保存します。
http://pastebin.com/dYWqH0Wq
private boolean[] pressed = new boolean[5 * 5 + 1];
というのが工夫で、pressed[0] = true; 以降の添字は false
にしておいて、ボタンの数字を添え字と照合して、
pressed[前の数字] == true の時だけ、ボタンが変化するようにしています。
この回答への補足
2回もご回答ありがとうございます。
追加でお聞きしたいのですが、
表示された数字に、画像をそれぞれ当てはめる方法をよろしければ教えて頂けないでしょうか。
1 =画像の1、16 = 画像の16という風にそれぞれにあてはめていきたいです。
class NumberdButton extends JButton {}
の中にImageIconを使えばいいのかなと思いしてみたのですが、ランダムな数字にくっつけていく方法がわかりません。
お手数ですが、ご教授よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語 3 2022/11/09 13:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
式の型は配列型で int に解決済...
-
C++からC#のdllを参照する際、...
-
JAVAでCの関数ポインタのような...
-
共有メモリについて
-
「配列定数は、イニシャライザ...
-
コード中の謎のエラー
-
C#での画像ファイルをドラッグ...
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
java spring でエラーが出て困...
-
java 長さの異なる配列の代入
-
JAVA EOFの検出 (条件文で「...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
後置インクリメントの計算過程...
-
二分探索木で例えば1〜10の値を...
-
sin曲線とcos曲線を描くプログ...
-
byte[2] から int へ。
-
intが負の時に投げる例外はあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
java streamでenum配列への変換
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
-
アンマネージDLLで、ダイアログ...
-
【C#】フォームをなめらかに移動
-
(Swing)JTextFieldを半角のみ入...
-
Javaで簡単なアニメーションを...
-
javaのエラーの意味がわかりま...
-
C#で判断文(三択)の省略形は...
-
共有メモリについて
おすすめ情報