2013-03-11 3 views
1

Я пишу программу java, которая может графически отображать функцию в созданном окне. Все работало, пока я не начал возиться с косинусом/синусом. Моя программа компилируется, но по какой-то причине я получаю пустое окно, когда я запускаю его. Предполагается, что он отображает ось x и y с косинусовым графиком с учетом значений x. Я пробовал весь день и не могу понять, что моя логическая ошибка - это мой код.Пустое окно в java

Вот мой код:

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

Вы не добавляете компонент, который вы рисуете, на свой JFrame –

+0

хорошо Я довольно новичок в java, поэтому я не знаком с этой концепцией. Будет ли это выглядеть примерно так ... graph.add (все в моем компоненте краски)? – man123456

+0

Пожалуйста, см. Ответ, который я предоставил –

ответ

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 для более функциональных возможностей, если вам нравится.

+1

. JPanel или JContainer, вероятно, были бы лучше. Тогда вы можете 'setContentPane()' и 'pack()' лучше. – 2013-03-11 00:12:23

+0

Спасибо, что я понимаю сейчас! У меня есть это графическое представление, но оно просто выглядит как прямая линия, а не то, что хотела бы функция косинуса, - там что-то не хватает для правильного построения графика или слишком маленькие точки? – man123456

+0

Извините за поздний ответ. Структура графика выглядит как косинусная функция. Однако, если вы хотите нарисовать фактические строки, представляющие данные, это еще одна история, связанная с тем, как вы на самом деле рисуете график. –

2

JFrame не подклассом JComponent и, следовательно, не перегрузить метод paintComponent поэтому метод никогда не вызывается.

Именно поэтому рекомендуется добавить аннотацию @Override, чтобы компилятор выполнил необходимую проверку метода. Вам необходимо переместить эту функциональность в подклассы JComponent, не забывая позвонить super.paintComponent(g).

Смежные вопросы