Skip to content

Instantly share code, notes, and snippets.

@ronnyworm
Last active March 25, 2017 13:18
Show Gist options
  • Save ronnyworm/c3391f3e8c2a5f85c873efe809d41a37 to your computer and use it in GitHub Desktop.
Save ronnyworm/c3391f3e8c2a5f85c873efe809d41a37 to your computer and use it in GitHub Desktop.
Draw a graph (similar to GeoGebra)
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