2016-10-25 16 views
0

だから私は、これは私の教科書は私がこのプログラムを作成したい方法です、私は推測することができるものからのWindows 10上で実行するためのシンプルなグラフィックスプログラムを作成しようとしてきた:JavaのAWTのトラブルシューティング

import java.awt.*; 
public class DrawLine1 { 
    public static void main (String[]args) { 
     DrawingPanel panel = new DrawingPanel(1281, 721); 
     Graphics g = panel.getGraphics(); 
     g.drawLine(1, 1, 69, 69); 
    } 
} 

しかし、私はそれをコンパイルしようとすると、cmdが次のエラーを返します。 D

rawLine1.java:4: error: cannot access DrawingPanel 
       DrawingPanel panel = new DrawingPanel(1281, 721); 
       ^
    bad source file: .\DrawingPanel.java 
    file does not contain class DrawingPanel 
    Please remove or make sure it appears in the correct subdirectory of the sourcepath. 
1 error 

は、これは私が書いたコードを持つか、私は、Javaを設定し、私はそれをどのように修正すればよいかとの誤差ですか?

+0

https://docs.oracle.com/javase/tutorial/uiswing/painting/を参照することをお勧めします。 – VGR

+0

*「私が推測できるところから、これは私の教科書がこのプログラムを作成したいと思う方法です: 'Graphics g = panel。あなたがテキストブックを完全に誤解してしまった、またはその本が役に立たず、ドアストップ/キンドリングとして使用されるべきであるかどうか。 –

答えて

2

あなたが書いたコードが不完全であるように見えます - コンパイラはDrawingPanelクラスを見つけることができないと不満を表明していますが、存在しない場合はDrawingPanelも作成してコンパイルする必要があります最初のコード。しかし、私はそれが

  • 一つは、いくつかのキーの悪い提言を作っているようあなたはこのコードを使用するか、どんなチュートリアルがそれを示唆することをお勧めしません、と言った、あなたは任意の描画にJPanelを表示する必要がある(DrawingPanel と仮定するとですJPanel)を最上位ウィンドウに表示して表示します。 Swing GUIの場合は、JFrameを作成してJPanelを配置し、次にJFrameを可視に設定する必要があることを意味します。getGraphics()を呼び出して、コンポーネントグラフィックスオブジェクトを使用した描画はお勧めしませんこのようにして取得されたGraphicsオブジェクトは永続することが保証されていないためです。たとえば、このコードを使用すると仮定すると、GUIを最小化して復元すると、行が消えてしまいます。
  • スイングとAWTのグラフィックスはパッシブです - JPanelのpaintComponentメソッドをオーバーライドし、このメソッドの内部であなたの描画を行います。
  • SwingイベントスレッドでSwingおよびAWT GUIを起動する必要があります。これは通常、このコードをRunnableのrun()メソッドに置き、RunnableをSwingUtilities.invokeLater(...)メソッド呼び出しに渡すことによって行われます。たとえば、

:あなたは教科書Building Java Programsで作業しているよう

import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.*; 

public class SimpleLine extends JPanel { 

    private static final int PANEL_WIDTH = 400; 

    public SimpleLine() { 
     setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_WIDTH)); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); // so JPanel can do its own housekeeping graphics 
     int x1 = 1; 
     int y1 = x1; 
     int x2 = PANEL_WIDTH - 2; 
     int y2 = x2; 
     g.drawLine(x1, y1, x2, y2); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("SimpleLine"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new SimpleLine()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

ありがとう、これは機能しますが、あなたがダウンロードしなければならない特別なクラス(描画パネル)を使用していますが、そのようなものは描画方法を知る目的を取り去っています。あなたのコード内のすべてが何をしているのかを分析するつもりです:) –

1

が見えます。問題を再現することができました。これはコードの問題でも、Javaの設定方法(Java 8を実行していることを前提としています)にも問題はありません。

あなたのコードは、著者のウェブサイトの教科書の著者によって提供された別のJavaクラスDrawingPanelを参照しています。

http://www.buildingjavaprograms.com/DrawingPanel.java

そして、そのjavaファイルを置く:その教科書を使って学習パスを継続するために、そしてあなたのプログラムをコンパイルするために取得するために、あなたは教科書のWebサイトからDrawingPanelクラスをダウンロードする必要があります

DrawLine1.javaファイルと同じ場所に配置します。

以前と同じように再コンパイルし、コードはエラーなしでコンパイルする必要があります。

+0

ありがとう!他の人が働いているとはいえ、これは私がしたいことを解決します。 –

関連する問題