在java的空白窗口

时间:2013-03-11 00:00:25

标签: java window cosine sine

我正在编写一个可以在创建的窗口上绘制函数图形的java程序。一切都在工作,直到我开始弄乱余弦/正弦。我的程序编译但由于某种原因,我运行它时会得到一个空白窗口。假定x和y轴显示给定x值的余弦图。我整天都在尝试这些东西,无法弄清楚我的逻辑错误是我的代码。

这是我的代码:

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");
}
}

2 个答案:

答案 0 :(得分:2)

JFrame不是JComponent的子类,因此不会覆盖paintComponent方法,因此永远不会调用该方法。

这就是为什么建议添加@Override注释以让编译器执行必要的方法检查。您需要将此功能移至子类JComponent并忘记致电super.paintComponent(g)

答案 1 :(得分:2)

您没有将正在绘画的组件添加到JFrame。 您需要做的是让PlotGraph类扩展JComponent,或者是JComponentJPanelJContainer的子类,如注释),然后将PlotGraph的对象添加到JFrame

例如:

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课程应该延伸JComponent而不是JFrame

class PlotGraph extends JComponent

如图所示,如果您愿意,可以让您的课程扩展JPanelJContainer以获得更多功能。