1

作成されたウィンドウで関数をグラフ化できる Java プログラムを作成しています。コサイン/サインをいじり始めるまで、すべてが機能していました。プログラムはコンパイルされますが、実行すると何らかの理由で空白のウィンドウが表示されます。x 値が指定されたコサイン グラフを使用して、x 軸と y 軸を表示することになっています。私は一日中何かを試してきましたが、私の論理的な間違いが私のコードであることを理解できません。

これが私のコードです:

import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
import java.lang.Math;
import java.awt.geom.*;

class PlotGraph extends JFrame{


public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D) g;

    g.drawLine(50, 300, 550, 300); //x axis
    g.drawLine(300, 550, 300, 50); //y axis
    //Orignin x = 300 y = 300

    double xmin, xmax;
    double y;
    xmin =(0);
    xmax = 100;
    double x = xmin;

    double form = Math.cos(x);

    double last_y = 300-(form);

    for (x = xmin+1; x<=xmax; x++){
    double newForm = Math.cos(x);
    y = 300-(newForm);
    g2.draw(new Line2D.Double(x-1+(300), last_y, x+300, y));
    last_y = y;

    }




}

public static void main(String [] args) {

    PlotGraph graph = new PlotGraph();
    graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    graph.setSize(600, 600);
    graph.setVisible(true); 
    graph.setTitle("PlotGraph");
}
}
4

2 に答える 2

2

JFrameのサブクラスではないため、メソッドをJComponentオーバーライドしないpaintComponentため、メソッドが呼び出されることはありません。

@Overrideこれが、アノテーションを追加して、コンパイラが必要なメソッド チェックを実行できるようにすることをお勧めする理由です。JComponentこの機能を呼び出すことを忘れないように、この機能をサブクラスに移動する必要がありますsuper.paintComponent(g)

于 2013-03-11T00:08:33.427 に答える
2

ペイントしているコンポーネントを に追加していませんJFrame。あなたがする必要があるのは、あなたのPlotGraphクラスが extends JComponent、またはのサブクラスであるクラスJComponentJPanelまたはJContainerコメントで提案されているように)であり、次に のオブジェクトPlotGraphJFrame.

例えば:

public static void main(String args[]) {

    JFrame frame = new JFrame();
    PlotGraph graph = new PlotGraph();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 600);
    frame.add(graph);
    frame.setVisible(true); 
    frame.setTitle("PlotGraph");
}

クラスは次の代わりにPlotGraph拡張する必要があります。JComponentJFrame

class PlotGraph extends JComponent

Legend が述べたように、必要に応じて、クラスを拡張しJPanelたりJContainer、より多くの機能を追加したりできます。

于 2013-03-11T00:09:24.880 に答える