public class Picross extends JFrame implements ActionListener {
int[][] questionarray = new int[MASS][MASS];
public Picross() {
Board board = new Board();
JPanel btnpanel = new JPanel();
JButton btn = new JButton("問題選択");
JButton answerbtn = new JButton("答え合わせ");
JPanel labelpanel = new JPanel();
JLabel label = new JLabel("テスト");
// フォームの設定
setTitle("ピクロス");
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 問題選択ボタンの設定
btn.addActionListener(this);
btnpanel.add(btn);
// ピクロスの数字を表示するラベルの設定
board.add(labelpanel);
labelpanel.add(label);
// 答え合わせボタンの設定
answerbtn.addActionListener(this);
btnpanel.add(answerbtn);
// ボタンの位置の設定
add(btnpanel, BorderLayout.SOUTH);
// ピクロスのボードの位置を設定
add(board, BorderLayout.CENTER);
// 全てをまとめる
pack();
}
ピクロスの要である数字をラベルにて出力したいのですが、boardに描いた絵に隠れてしまっているのか、うまくいきません。
btnpanelのところであれば表示されたのですが・・・。
お手数ですが、宜しくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
JLabelを使用する必要性がないなら、GraphicsのdrowStringメソッドで文字列を描画することが出来ます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
check解決した方法
+1
package newPicross;
import static newPicross.CommonConst.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
/*
*
*/
public class Picross extends JFrame implements ActionListener {
int[][] questionarray = new int[MASS][MASS];
JLabel[] sideLabels = new JLabel[MASS];
JLabel[] verticalLabels = new JLabel[MASS];
public Picross() {
Board board = new Board();
JPanel btnpanel = new JPanel();
JButton btn = new JButton("問題選択");
JButton answerbtn = new JButton("答え合わせ");
JPanel sideLabelPanel = new JPanel();
JPanel verticalLabelPanel = new JPanel();
setLayout(null);
board.setBackground(Color.WHITE);
// フォームの設定
setTitle("ピクロス");
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 問題選択ボタンの設定
btn.addActionListener(this);
btnpanel.add(btn);
//Labelを配置するためのPanelのセット(横)
sideLabelPanel.setLayout(null);
sideLabelPanel.setBounds(0,MARGIN+SIZE, MARGIN+SIZE, SIZE*(MASS-1));
sideLabelPanel.setOpaque(false);
add(sideLabelPanel);
// ピクロスの数字を表示するラベルの設定(横)
for(int i = 1;i < MASS;i++){
sideLabels[i] = new JLabel();
sideLabels[i].setBounds(5, (SIZE*(i-1)), MARGIN, SIZE);
sideLabels[i].setText("test" + i);
sideLabelPanel.add(sideLabels[i]);
}
//Labelを配置するためのPanelのセット(縦)
verticalLabelPanel.setLayout(null);
verticalLabelPanel.setBounds(MARGIN+SIZE,0, WI-MARGIN-SIZE, MARGIN+SIZE);
verticalLabelPanel.setOpaque(false);
add(verticalLabelPanel);
// ピクロスの数字を表示するラベルの設定(縦)
for(int i = 1;i < MASS;i++){
verticalLabels[i] = new JLabel();
}
// 答え合わせボタンの設定
answerbtn.addActionListener(this);
btnpanel.add(answerbtn);
// ボタンの位置の設定
btnpanel.setBounds(0, 440, 440, 100);
add(btnpanel);
// ピクロスのボードの位置を設定
board.setBounds(0, 0, WI, HI);
add(board);
// 全てをまとめる
pack();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("問題選択")) {
// 問題選択ボタン
// 問題を選択する
selectQuestion();
} else if (e.getActionCommand().equals("答え合わせ")) {
// 答え合わせボタン
}
}
private void selectQuestion() {
int x = 1;
int y = 1;
JFileChooser fileChooser = new JFileChooser();
// OpenDialogを表示させる
int selected = fileChooser.showOpenDialog(this);
// 開くを選択した場合
if (selected == JFileChooser.APPROVE_OPTION) {
try {
FileReader fileReader = new FileReader(fileChooser.getSelectedFile());
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
StringTokenizer token;
while ((line = bufferedReader.readLine()) != null) {
token = new StringTokenizer(line, ",");
while (token.hasMoreTokens()) {
if (token.nextToken().equals("1")) {
questionarray[x][y] = 1;
} else {
questionarray[x][y] = 0;
}
if (x == MASS - 1) {
x = 1;
y++;
} else {
x++;
}
}
}
bufferedReader.close();
// 選択したファイルを読み込む
} catch (Exception e2) {
// TODO: handle exception
}
}
// 縦の読み込み
vertical();
// 横の読み込み
side();
}
private void side() {
int shaveCount = 0;
String shaveString = "";
for (int y = 1; y < MASS; y++) {
for (int x = 1; x < MASS; x++) {
if (questionarray[x][y] == 1) {
shaveCount++;
} else {
if (shaveCount > 0) {
shaveString = shaveString.trim() + shaveCount + " ";
shaveCount = 0;
} else {
shaveString = shaveString.trim() + " ";
shaveCount = 0;
}
}
if (x == MASS - 1) {
if (shaveString.trim().length() == 0) {
sideLabels[y].setText("0");
} else {
sideLabels[y].setText(shaveString);
}
shaveString = "";
}
}
}
}
private void vertical() {
}
/**
*
* ピクロスの盤面
*
*/
static class Board extends JLayeredPane implements MouseListener {
int[][] boardarray = new int[MASS][MASS];
public Board() {
setPreferredSize(new Dimension(WI, HI));
addMouseListener(this);
}
public void paint(Graphics graphi) {
graphi.setColor(Color.WHITE);
// ボードの下地を描く
graphi.fillRect(0, 0, HI, WI);
graphi.setColor(Color.BLACK);
// ピクロスのマスの線を引く
for (int i = 1; i <= MASS; i++) {
// 横線
graphi.drawLine(0, i * SIZE + MARGIN, WI, i * SIZE + MARGIN);
// 縦線
graphi.drawLine(i * SIZE + MARGIN, 0, i * SIZE + MARGIN, HI);
}
// 削った場所と戻した場所と削ってはいけない場所の色付け
for (int x = 1; x < MASS; x++) {
for (int y = 1; y < MASS; y++) {
if (boardarray[x][y] == SHAVED) {
// 削った場所
graphi.setColor(Color.BLACK);
graphi.fillRect(x * SIZE + MARGIN, y * SIZE + MARGIN, SIZE, SIZE);
} else if (boardarray[x][y] == BANSHAVED) {
// 削ってはいけない場所
graphi.setColor(Color.RED);
graphi.drawLine(x * SIZE + MARGIN, y * SIZE + MARGIN, (x + 1) * SIZE + MARGIN,
(y + 1) * SIZE + MARGIN);
graphi.drawLine(x * SIZE + MARGIN, (y + 1) * SIZE + MARGIN, (x + 1) * SIZE + MARGIN,
y * SIZE + MARGIN);
} else {
// 元に戻した場所
graphi.setColor(Color.WHITE);
}
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void mousePressed(MouseEvent e) {
int x = (e.getX() - MARGIN) / SIZE;
int y = (e.getY() - MARGIN) / SIZE;
if ((x > 0 && y > 0) && (x < MASS && y < MASS)) {
if (e.getClickCount() == 1) {
// クリック時
if (boardarray[x][y] == 0) {
boardarray[x][y] = SHAVED;
} else {
boardarray[x][y] = INIT;
}
} else if (e.getClickCount() == 2) {
// ダブルクリック時
boardarray[x][y] = BANSHAVED;
}
// 再描画する
repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void mouseExited(MouseEvent e) {
// TODO 自動生成されたメソッド・スタブ
}
}
public static void main(String[] args) {
Picross board = new Picross();
board.setVisible(true);
}
}
setLayout(null);を入れることと
Boardの継承をPanelからJLayeredPaneにすることによって解決しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
dsuzuki
2016/06/06 11:57
悩んでいるのは具体的にソースのどこでしょうか。
メソッドselectQuestion内のファイル読み込み処理?
dsuzuki
2016/06/10 12:16
描画している(Boardの)コードがないとどんな描画をしているかわからないため、助言が出来ません。質問変更前のコードのままでしょうか。
sobue
2016/06/10 15:01
質問変更前と同じです