質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

788閲覧

別のファイルで作ったGraphicsクラスをつかったメソッドをMainクラスのmainメソッドで使えない

happywheels4242

総合スコア9

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/07/13 03:29

BoardクラスのdrawBoardメソッドをMainクラスのmainメソッドで呼び出したところ、
以下のようなエラーが起きました。

外部のサイトを参考にGraphicsオブジェクトを使おうとしましたが
他のオブジェクトのようにnewを用いて新しくオブジェクトを生成せず、
public static void drawBoard(Graphics g) {
}
のように仮引数を入れる場所に記述する理由がわかりません。
そこらへんの動作もできれば、詳しく説明していただくとありがたいですm(__)m

エラー内容

zsh

1MacBook-Pro-2 othello % javac Board.java Main.java 2Main.java:8: エラー: クラス Boardのメソッド drawBoardは指定された型に適用できません。 3 Board.drawBoard(); 4 ^ 5 期待値: Graphics 6 検出値: 引数がありません 7 理由: 実引数リストと仮引数リストの長さが異なります 8エラー1個

###Main.java

Java

1public class Main { 2 public static void main(String args[]) { 3 4 // 配列を初期化 5 Board.initBoard(); 6 // オセロ版を初期化 7 Board.drawBoard(); 8 9 } 10}

###Board.java

Java

1import java.awt.Graphics; 2import java.awt.Color; 3public class Board { 4 5 // フィールド(クラスブロック内に宣言された変数)宣言 6 public static final int blank = 0; 7 public static final int width = 8; 8 public static final int height = 8; 9 public static final int gs = 1; 10 public static int[][] board = new int[height][width]; 11 12 // オセロ盤を初期化するメソッド 13 public static void initBoard() { 14 for(int i = 0; i < height; i++) { 15 for(int a = 0; i < width; i++) { 16 board[i][a] = blank; 17 } 18 } 19 } 20 21 // オセロ盤を描画するメソッド 22 public static void drawBoard(Graphics g) { 23 24 // 色を指定 25 g.setColor(new Color(0,128,128)); 26 // マス全体を塗りつぶす 27 g.fillRect(0, 0,width,height); 28 29 // 縦横に線を引き、マス目を描画する 30 g.setColor(Color.black); 31 for(int i = 0; i < height; i++) { 32 // 縦線を引く 33 // g.drawLine(startX,startY,endX,endY); 34 g.drawLine(gs*i,0,gs*i,height); 35 } 36 for(int i = 0; i < width; i++) { 37 // 横線を引く 38 // g.drawLine(startX,startY,endX,endY); 39 g.drawLine(0,gs*i,width,gs*i); 40 } 41 // 外枠(矩形)を描画 42 g.drawRect(0,0,width,height); 43 44 } 45}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんなことがしたいのかな?

Java

1import java.awt.Graphics; 2import java.awt.Color; 3import javax.swing.JFrame; 4import javax.swing.JPanel; 5 6class Main extends JFrame { 7 public static final int blank = 0, black = 1, white = 2; 8 public static final int width = 8, height = 8; 9 public static final int gs = 80; 10 public int[][] board = new int[height][width]; 11 12 public static void main(String[] args) { new Main(); } 13 14 Main() { 15 setDefaultCloseOperation(EXIT_ON_CLOSE); 16 setSize(650, 680); 17 setTitle("Othello"); 18 setLocationRelativeTo(null); 19 setResizable(false); 20 add(new Board()); //描画領域の追加 21 setVisible(true); 22 initBoard(); 23 } 24 25 void initBoard() { 26 for (int i = 0; i < height; i++) 27 for (int j = 0; j < width; j++) 28 board[i][j] = blank; 29 board[3][4] = board[4][3] = black; 30 board[3][3] = board[4][4] = white; 31 } 32 33 class Board extends JPanel { 34 public void paintComponent(Graphics g) { 35 g.setColor(new Color(0, 128, 128)); // 色を指定 36 g.fillRect(0, 0, gs * width, gs * height); // 全体を塗りつぶす 37 g.setColor(Color.black); 38 for (int i = 0; i < height; i++) 39 g.drawLine(gs * i, 0, gs * i, gs * height); // 縦線を引く 40 for (int i = 0; i < width; i++) 41 g.drawLine(0, gs * i, gs * width, gs * i); // 横線を引く 42 g.drawRect(0, 0, gs * width, gs * height); // 外枠(矩形)を描画 43 for (int i = 0; i < width; i++) { 44 for (int j = 0; j < height; j++) { 45 int b = board[i][j]; 46 if (b != blank) { 47 g.setColor(b == black ? Color.black : Color.white); 48 g.fillOval(gs*i+4, gs*j+4, gs-8, gs-8); 49 } 50 } 51 } 52 } 53 } 54}

追記
ファイルを Main.java と Board.java に分割できるように
class Board を独立させました。
マウスボタンをクリックしたときの処理を追加してみました。

Java

1import java.awt.Graphics; 2import java.awt.Color; 3import java.awt.event.MouseAdapter; 4import java.awt.event.MouseEvent; 5import javax.swing.JFrame; 6import javax.swing.JPanel; 7 8class Main extends JFrame { 9 10 public static void main(String[] args) { new Main(); } 11 12 Main() { 13 setSize(650, 680); 14 setTitle("Othello"); 15 setLocationRelativeTo(null); 16 setResizable(false); 17 setDefaultCloseOperation(EXIT_ON_CLOSE); // [x]ボタンで終了 18 add(new Board()); // 描画領域の追加 19 setVisible(true); 20 } 21} 22 23class Board extends JPanel { 24 static final int blank = 0, black = 1, white = 2; 25 static final int width = 8, height = 8; 26 static final int gs = 80; 27 28 int[][] board = new int[height][width]; 29 int turn = black; 30 31 Board() { 32 for (int i = 0; i < height; i++) 33 for (int j = 0; j < width; j++) board[i][j] = blank; 34 board[3][3] = board[4][4] = white; 35 board[3][4] = board[4][3] = black; 36 37 addMouseListener(new MouseAdapter() { 38 public void mousePressed(MouseEvent e) { 39 int x = e.getX() / gs, y = e.getY() / gs; 40 if (x < 8 && y < 8) { 41 board[x][y] = turn; 42 turn = black + white - turn; 43 repaint(); 44 } 45 } 46 }); 47 } 48 49 public void paintComponent(Graphics g) { 50 g.setColor(new Color(0, 128, 128)); // 色を指定 51 g.fillRect(0, 0, gs * width, gs * height); // 全体を塗りつぶす 52 53 g.setColor(Color.black); 54 for (int i = 0; i < height; i++) 55 g.drawLine(gs * i, 0, gs * i, gs * height); // 縦線を引く 56 for (int i = 0; i < width; i++) 57 g.drawLine(0, gs * i, gs * width, gs * i); // 横線を引く 58 g.drawRect(0, 0, gs * width, gs * height); // 外枠(矩形)を描画 59 60 for (int i = 0; i < height; i++) { 61 for (int j = 0; j < width; j++) { 62 int piece = board[i][j]; 63 if (piece != blank) { 64 g.setColor(piece == black ? Color.black : Color.white); 65 g.fillOval(gs * i + 4, gs * j + 4, gs - 8, gs - 8); 66 } 67 } 68 } 69 } 70}

投稿2020/07/13 13:51

編集2020/07/14 02:17
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

mainから呼び出す際に描画エリアを表すGraphics gを引数に入れていないからです。
Appletを継承するなり、Frameを継承するなりして描画エリアを作る必要があります。

そこは他のサンプルコードから引っ張ってきて、改良していったほうが早いですよ。

投稿2020/07/13 06:01

Kaleidoscope

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

happywheels4242

2020/07/13 07:00

すみません。 入れ方あってますか? Main.java:8: エラー: ')'がありません Board.drawBoard(Graphics g); ^ Main.java:8: エラー: 文ではありません Board.drawBoard(Graphics g); ^ Main.java:8: エラー: ';'がありません Board.drawBoard(Graphics g); ^ エラー3個
Kaleidoscope

2020/07/13 07:30

このプログラムにはどこにも「描画エリア」がないので単にGraphics g を追記しても意味ありませんよ。 アプレットとして作りたいのか、アプリケーションとして作りたいのかでも変わってきますので。 今の作りとしてはアプリケーションのほうが近いのでそちらを参考にサンプルを動かしてみてください。 アプリケーションのサンプル https://cc.musabi.ac.jp/kenkyu/cf/program/j03.html アプレットのサンプル https://www.javadrive.jp/applet/graphics/index4.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問