Last active
March 25, 2017 13:18
-
-
Save ronnyworm/c3391f3e8c2a5f85c873efe809d41a37 to your computer and use it in GitHub Desktop.
Draw a graph (similar to GeoGebra)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Color; | |
import java.awt.EventQueue; | |
import java.awt.Font; | |
import java.awt.Graphics; | |
import java.awt.Graphics2D; | |
import java.awt.LayoutManager; | |
import javax.swing.JFrame; | |
import javax.swing.JPanel; | |
import javax.swing.LayoutStyle; | |
import java.awt.BorderLayout; | |
import java.awt.event.MouseEvent; | |
import java.awt.event.MouseListener; | |
import java.awt.event.MouseMotionListener; | |
import javax.swing.JLabel; | |
import javax.swing.JButton; | |
import java.awt.event.ActionListener; | |
import java.awt.event.ActionEvent; | |
import java.awt.geom.AffineTransform; | |
public class GraphDrawer extends JFrame { | |
private JPanel pnlGraph; | |
/** | |
* Launch the application. | |
*/ | |
public static void main(String[] args) { | |
EventQueue.invokeLater(new Runnable() { | |
public void run() { | |
try { | |
GraphDrawer frame = new GraphDrawer(); | |
frame.setVisible(true); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
}); | |
} | |
/** | |
* Create the frame. | |
*/ | |
public GraphDrawer() { | |
setBounds(100, 100, 800, 600); | |
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
pnlGraph = new GraphPanel(); | |
pnlGraph.addMouseMotionListener((MouseMotionListener) pnlGraph); | |
getContentPane().add(pnlGraph, BorderLayout.CENTER); | |
} | |
} | |
class GraphPanel extends JPanel implements MouseMotionListener{ | |
private int mousex,mousey; | |
private JLabel lblCoords; | |
public GraphPanel(){ | |
setLayout(new BorderLayout(0,0)); | |
lblCoords=new JLabel("Coords: 0, 0"); | |
add(lblCoords,BorderLayout.SOUTH); | |
} | |
protected void paintComponent(Graphics g) { | |
super.paintComponent(g); | |
Graphics2D g2 = (Graphics2D)g; | |
AffineTransform at = g2.getTransform(),atOrig=g2.getTransform(); | |
at.translate(getWidth()/2, getHeight()/2); | |
at.scale(1, -1); | |
at.translate(0, 0); | |
g2.setTransform(at); | |
for(int i=-200;i<200;++i) | |
g.drawLine(i, (int)(0.0001*f(i)), i+1, (int)(0.0001*f(i + 1))); | |
g2.setTransform(atOrig); | |
lblCoords.setText("Coords: " + String.valueOf(mousex-getWidth()/2) + ", " + String.valueOf(mousey-getHeight()/2)); | |
} | |
private double f(double x){ | |
return 2*x*x*x + 9*x*x + 3*x + 8; | |
} | |
public void mouseDragged(MouseEvent arg0) { | |
} | |
public void mouseMoved(MouseEvent arg0) { | |
mousex=arg0.getPoint().x; | |
mousey=arg0.getPoint().y; | |
this.repaint(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment