我正在编写一个可以在创建的窗口上绘制函数图形的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");
}
}
答案 0 :(得分:2)
JFrame
不是JComponent
的子类,因此不会覆盖paintComponent
方法,因此永远不会调用该方法。
这就是为什么建议添加@Override
注释以让编译器执行必要的方法检查。您需要将此功能移至子类JComponent
并忘记致电super.paintComponent(g)
。
答案 1 :(得分:2)
您没有将正在绘画的组件添加到JFrame
。
您需要做的是让PlotGraph
类扩展JComponent
,或者是JComponent
(JPanel
或JContainer
的子类,如注释),然后将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
如图所示,如果您愿意,可以让您的课程扩展JPanel
或JContainer
以获得更多功能。