2

私はゆっくりとJavaを学んでおり、三目並べゲームを作成することにしました。私はボードを描くことを試みました、そして私は誰もがうまくいくと言った線を描く簡単な方法を見つけました。私はこれまでにこれを持っています:

    public void constructBoard() {
    JFrame frame = new JFrame("Tic Tac Toe");
    frame.setSize(600,600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.toFront();
    Graphics lines = new Graphics();
    lines = getGraphics();
    lines.drawLine(100,100,300,500);
    lines.setColor(Color.black);
  //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
  //  frame.add(label, BorderLayout.CENTER);
}

JFrameが表示され、タイトルは表示されますが、行がありません。私は複数のことを試しましたが、その中には次のような別の方法があります。

public void drawBoard(Graphics lines){
     lines = getGraphics();
     lines.drawLine(100,100,300,500);
     lines.setColor(Color.black);
}

しかし、メインクラスでこれを呼び出すと、グラフィックスタイプと一致させるために括弧の間に何かが必要であることがわかります。私のコンパイラ(Eclipse)はnullを推奨していますが、私にとっては、nullポインタ例外が発生している可能性があります。

BoardクラスにコンストラクターBoardメソッドがあり、その中にsuper()を持つコンストラクターBoard()があります。

    public Board(){
        super();
    }

次に、Board型のオブジェクトを作成し、メソッドを呼び出すメインクラスがあります。私は見ることがわかっているところならどこでも検索しました、そしてどこでも私が持っているものは線を引く方法であると言います。次に、nullポインターの例外がある他のユーザーは、解決策が得られていないか、自分に合った解決策が得られていません。私はDebugGraphicsを試し、すべてをメインクラスに入れました。lines= new Graphics(); しかし、それは私にエラーを与えます。助けてくれてありがとう。

フルボードクラス:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;



public class Board extends JPanel {
        public Board(){
            super();
        }
        public void constructBoard() {
            JFrame frame = new JFrame("Tic Tac Toe");
            frame.setSize(600,600);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.toFront();
                Graphics lines = new Graphics();
                lines = getGraphics();
                lines.drawLine(100,100,300,500);
            lines.setColor(Color.black);
            //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
            //  frame.add(label, BorderLayout.CENTER);
        }
}

フルメインクラス:

import java.awt.Color;
import java.awt.Graphics;


public class Main {

    /**
     * @param args
     */
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                    Board board = new Board();
                    board.constructBoard();

            }

}
4

1 に答える 1

0

あなたは間違った方法で始めたと思います。カスタム描画されたグラフィカルなものをその中に表示できるようにするために、paintComponentメソッドを実際にオーバーライドする方法を示す以下の概念実証を参照してください。JPanelそれはあなたが板を引かなければならない場所です。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class App {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.getContentPane().add(new MainPanel());
        frame.setBounds(100, 100, 600, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class MainPanel extends JPanel {
    MainPanel() {
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        int width = getWidth();
        int height = getHeight();
        drawBoard((Graphics2D) g, width, height);
    }

    private void drawBoard(Graphics2D g2, int width, int height) {
        // TODO: this is the place where you actually want to draw your board
        g2.drawRect(10, 10, width - 20, height - 20);
    }
}
于 2012-09-15T16:17:30.550 に答える