All pastes #497491 Raw Edit

Matheprog

public java v1 · immutable
·published 2007-05-19 21:47 UTC
rendered paste body
GUI.java:import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import javax.swing.*;public class GUI extends JComponent implements ActionListener {	/**	 * @param args	 */	private JFrame f;	private Graphics g;	//private int height, width;	private int startheight = 700; // Höhe des Fensters beim Programmstart	private int startwidth = 700; // Breite des Fensters beim Programmstart	private double xFaktor; //Streckungsfaktor in x-Richtung	private double yFaktor; //Streckungsfaktor in y-Richtung		private int zoom=60; //gibt den Vergrößerungsfaktor der gesamten Grafik an (Bisher außer länge Scalenstriche)	private int zeichenqualitaet=12;		private Color gitterfarbe = Color.lightGray; //Gitterfarbe beim Start	private Color koordinatenkreuzfarbe = Color.black; //Farbe des Koordinatenkreuzes beim Start		private Color graphenfarbe = Color.black; //Farbe des Graphen beim Start		private Color hintergrundfarbe = Color.white; //Hintergrundfarbe, wird aber überschrieben	public static void main(String[] args) {		JFrame f = new JFrame();		f.setTitle("Matheprog");		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//damit Prog beendet wird		Container contentPane = f.getContentPane();		f.getContentPane().setLayout(new BorderLayout()); // Layout setzen		GUI gui = new GUI(f);		f.add(gui, BorderLayout.CENTER); 		//   	 Bildschirmabmessungen holen		Toolkit kit = Toolkit.getDefaultToolkit();		Dimension d = kit.getScreenSize();//Fenster wird mittig plaziert		f.setLocation(d.width / 2 - f.getWidth() / 2, (d.height / 2 - f				.getHeight() / 2));						// Texteingabe unten		JPanel panel = new JPanel();		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); //BoxLayout sorgt hier dafür, dass der Platz in x-Richtung ganz ausgefüllt wird				JButton button = new JButton("OK"); 				JTextField textField = new JTextField(); 					    panel.add(textField); 	    panel.add(button); 			    f.add(panel, BorderLayout.SOUTH); 		// Symbol des Fensters festlegen		Image img = kit.getImage("icon2.gif");		f.setIconImage(img);						f.setVisible(true);		panel.setVisible(true);	}	public GUI(JFrame f) {		f.setSize(startheight, startwidth);		menuezeileErzeugen(f);		addComponentListener( // Zeichnet Fenster neu bei Resize    		new ComponentAdapter() {			public void componentResized(ComponentEvent e) {				System.out.println("Repaint");				repaint(); 							}		});	}		@Override	protected void paintComponent(Graphics g) {		int paintheight = this.getHeight();		int paintwidth = this.getWidth();		//g.clearRect(0, 0, paintwidth, paintheight);				Graphics2D g2 = (Graphics2D) g;				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,				RenderingHints.VALUE_ANTIALIAS_ON);			this.isMaximumSizeSet();		System.out.println("Breite des Malfensters : " + paintwidth);		System.out.println("Höhe des Malfensters : " + paintheight);				xFaktor = Math.ceil (((double) paintwidth / (double) (startwidth)));//Berechnung des x-Faktors mit Rundung auf die 10er Stelle		yFaktor = Math.ceil(((double) paintheight / (double) startheight));//Berechnung des y-Faktors mit Rundung auf die 10er Stelle		System.out.println("Neuer x-Faktor: " + xFaktor);		System.out.println("Neuer y-Faktor: " + yFaktor);		koorinatenkreuz(g2,paintheight,paintwidth);		graphzeichnen(g2,paintheight,paintwidth);	}	public void koorinatenkreuz(Graphics2D g2,int height, int width) //Zeichnet bisher das Koordinatenkreuz mit Scala und Raster	{					int i=0;						g2.setColor(gitterfarbe);		while ((i < width/2)&&(i<height/2)) { //Zeichnet Gitter			g2.draw( new Line2D.Double((width/2)-(i*(0.5*zoom * yFaktor)),0,(width/2)-(i*(0.5*zoom * yFaktor)),height));// Linien in y-Richtung -			g2.draw( new Line2D.Double((width/2)+(i*(0.5*zoom * yFaktor)),0,(width/2)+(i*(0.5*zoom * yFaktor)),height));// Linien in y-Richtung	+				g2.draw( new Line2D.Double(0,(height/2)-(i*(0.5*zoom * xFaktor)),width,(height/2)-(i*(0.5*zoom * xFaktor))));//Linien in x-Richtung -			g2.draw( new Line2D.Double(0,(height/2)+(i*(0.5*zoom * xFaktor)),width,(height/2)+(i*(0.5*zoom * xFaktor))));//Linien in x-Richtung +								i = i +1;			}		g2.setColor(koordinatenkreuzfarbe); //setzt die Farbe des Koordinatenkreuzen einschließlich Scala		g2.draw( new Line2D.Double(0, height / 2, width, height / 2)); // vertikale Linie zeichnen		g2.draw( new Line2D.Double(width / 2, 0, width / 2, height)); // horizontale Linie zeichnen					i = 0;		while ((i < width/2)&&(i<height/2)) { //Zeichnet Scala auf die Achsen			g2.draw( new Line2D.Double((width/2)+(i*(1*zoom * xFaktor)), (height / 2 + (4 * yFaktor)), (width/2)+(i*(1*zoom * xFaktor)),(height / 2 - (4 * yFaktor))));// Scala der x-Achse			g2.draw( new Line2D.Double((width/2)-(i*(1*zoom * xFaktor)), (height / 2 + (4 * yFaktor)), (width/2)-(i*(1*zoom * xFaktor)),(height / 2 - (4 * yFaktor))));//			g2.draw( new Line2D.Double((width / 2 + (4 * xFaktor)),(height/2)+(i*(1*zoom * yFaktor)),(width / 2 - (4 * xFaktor)),(height/2)+(i*(1*zoom * yFaktor)))); //Scala der y-Achse			g2.draw( new Line2D.Double((width / 2 + (4 * xFaktor)),(height/2)-(i*(1*zoom * yFaktor)),(width / 2 - (4 * xFaktor)),(height/2)-(i*(1*zoom * yFaktor))));//									i = i+1;								}				//Zeichnet Zahlen an die Skala				g2.drawString("0",(int)((width/2)+1*xFaktor),(int) (height / 2 + (15 * xFaktor)));				i = 1;		while ((i < width/2)&&(i<height/2)) { //Zeichnet Scala auf die Achsen		g2.drawString(""+(i),(int)((width/2)+(1+i*(1*zoom * xFaktor))),(int) (height / 2 + (15 * xFaktor))); //Zahlen in x + Richtung		g2.drawString(""+(-i),(int)((width/2)-(1+i*(1*zoom * xFaktor))),(int) (height / 2 + (15 * xFaktor)));//Zahlen in x - Richtung				g2.drawString(""+(-i),(int) (width / 2 + (5 * xFaktor)),(int)((height/2)+(1+i*(1*zoom * xFaktor))));//Zahlen in y - Richtung		g2.drawString(""+(i),(int) (width / 2 + (5 * xFaktor)),(int)((height/2)-(1+i*(1*zoom * xFaktor))));//Zahlen in y + Richtung				i = i + 1;		}			}	private void menuezeileErzeugen(JFrame fenster) {				final int SHORTCUT_MASK =            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();		JMenuBar menuezeile = new JMenuBar();		fenster.setJMenuBar(menuezeile);		JMenu dateiMenue = new JMenu("Datei");		menuezeile.add(dateiMenue);		JMenuItem beendenEintrag = new JMenuItem("Beenden");		dateiMenue.add(beendenEintrag);		beendenEintrag.addActionListener(this);		JMenu einstellungenMenue = new JMenu("Einstellungen");		menuezeile.add(einstellungenMenue);				JMenuItem einstellungenEintrag = new JMenuItem("Farbeeinstellungen");		einstellungenMenue.add(einstellungenEintrag);		einstellungenEintrag.addActionListener(this);				JMenuItem zoominEintrag = new JMenuItem("Zoom + ");		zoominEintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, SHORTCUT_MASK));		einstellungenMenue.add(zoominEintrag);		zoominEintrag.addActionListener(this);				JMenuItem zoomoutEintrag = new JMenuItem("Zoom - ");		zoomoutEintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));		einstellungenMenue.add(zoomoutEintrag);		zoomoutEintrag.addActionListener(this);				JMenu hilfeMenue = new JMenu("Hilfe");		menuezeile.add(hilfeMenue);		JMenuItem infoEintrag = new JMenuItem("Info");		hilfeMenue.add(infoEintrag);		infoEintrag.addActionListener(this);	}	public void actionPerformed(ActionEvent event) {		System.out.println("Eintrag:" + event.getActionCommand());				if (event.getActionCommand() == "Beenden")			beenden();		if (event.getActionCommand() == "Info")			zeigeInfo();		if (event.getActionCommand() == "Farbeeinstellungen")			einstellungenoeffnen();		if (event.getActionCommand() == "Zoom + ")			zoomin();		if (event.getActionCommand() == "Zoom - ")			zoomout();	}	private void einstellungenoeffnen() {		JFrame win = new JFrame();		win.setTitle("Farbeeinstellungen");		Container contentPane = win.getContentPane();		win.getContentPane().setLayout(new GridLayout(3,2));		win.setSize(300, 150);		JLabel koordinatenfarbentext = new JLabel("Koordinatenkreuzfarbe:    ");				JComboBox koordinatenfarben = new JComboBox();		koordinatenfarben.addItem("Schwarz");		koordinatenfarben.addItem("Magenta");		koordinatenfarben.addItem("Rot");		koordinatenfarben.addItem("Blau");		koordinatenfarben.addItem("Orange");		koordinatenfarben.addItemListener(new ItemListener() {			public void itemStateChanged(ItemEvent e) {				JComboBox selectedChoice = (JComboBox) e.getSource();				if (selectedChoice.getSelectedItem().equals("Schwarz"))					koordinatenkreuzfarbe = Color.black;				if (selectedChoice.getSelectedItem().equals("Magenta"))					koordinatenkreuzfarbe = Color.MAGENTA;				if (selectedChoice.getSelectedItem().equals("Rot"))					koordinatenkreuzfarbe = Color.red;				if (selectedChoice.getSelectedItem().equals("Blau"))					koordinatenkreuzfarbe = Color.blue;				if (selectedChoice.getSelectedItem().equals("Orange"))					koordinatenkreuzfarbe = Color.orange;				repaint();			}		});		JLabel gitterfarbentext = new JLabel("Gitterfarbe: ");		JComboBox gitterfarben = new JComboBox();		gitterfarben.addItem("Hellgrau");		gitterfarben.addItem("Grau");		gitterfarben.addItem("Weiß");		gitterfarben.addItem("Schwarz");		gitterfarben.addItem("Cyan");		gitterfarben.addItemListener(new ItemListener() {			public void itemStateChanged(ItemEvent e) {				JComboBox selectedChoice = (JComboBox) e.getSource();				if (selectedChoice.getSelectedItem().equals("Schwarz"))					gitterfarbe = Color.black;				if (selectedChoice.getSelectedItem().equals("Cyan"))					gitterfarbe = Color.cyan;				if (selectedChoice.getSelectedItem().equals("Grau"))					gitterfarbe = Color.gray;				if (selectedChoice.getSelectedItem().equals("Hellgrau"))					gitterfarbe = Color.lightGray;				if (selectedChoice.getSelectedItem().equals("Weiß"))					gitterfarbe = Color.white;				repaint();			}		});				JLabel graphenfarbentext = new JLabel("Graphenfarbe: ");		JComboBox graphenfarben = new JComboBox();		graphenfarben.addItem("Schwarz");		graphenfarben.addItem("Rot");		graphenfarben.addItem("Grau");		graphenfarben.addItem("Weiß");		graphenfarben.addItem("Cyan");		graphenfarben.addItemListener(new ItemListener() {			public void itemStateChanged(ItemEvent e) {				JComboBox selectedChoice = (JComboBox) e.getSource();				if (selectedChoice.getSelectedItem().equals("Schwarz"))					graphenfarbe = Color.black;				if (selectedChoice.getSelectedItem().equals("Cyan"))					graphenfarbe = Color.cyan;				if (selectedChoice.getSelectedItem().equals("Grau"))					graphenfarbe = Color.gray;				if (selectedChoice.getSelectedItem().equals("Rot"))					graphenfarbe = Color.red;				if (selectedChoice.getSelectedItem().equals("Weiß"))					graphenfarbe = Color.white;				repaint();			}		});		win.add(koordinatenfarbentext);		win.add(koordinatenfarben);		win.add(gitterfarbentext);		win.add(gitterfarben);		win.add(graphenfarbentext);		win.add(graphenfarben);		win.setVisible(true);	}	private void zoomin(){		zoom = zoom+10;		if (zoom>=500)zoom=500;		repaint();	}		private void zoomout(){		zoom = zoom-10;		if (zoom<=10*xFaktor)zoom=10;		repaint();	}		private void beenden() {		System.exit(0);	}	private void zeigeInfo() {		JFrame win = new JFrame();		win.setTitle("Informationen");		Container contentPane = win.getContentPane();		win.getContentPane().setLayout(new BorderLayout());		win.setSize(300, 300);		JLabel infotext = new JLabel(				"Dies ist Philips und Christophers Matheprog");		win.add(infotext, BorderLayout.CENTER);		win.setVisible(true);	}		private void graphzeichnen(Graphics2D g2, int paintheight, int paintwidth) {		GeneralPath p = new GeneralPath(); //Pfad wird erstellt		double x =  0-(paintwidth / 2); // Bildanfangskoordinate in Mathematische														// x-Koordinate umformen					//Zeichnung wird genauer und Zeichnen beschleunigen indem ungültige Werte abgefangen werden		while((Double.isNaN(funktion(x)))){ //Überprüft ob der Wert eine Zahl ist						//System.out.println(" X Wert: "+ x);			x=x+0.01;		}				p.moveTo((paintwidth/2)+(x*(1*zoom * xFaktor)), (paintheight/2)-(funktion(x)*(1*zoom * yFaktor))); // Anfangspunkt des Pfades			while (x <= paintwidth) { // Schleife zum Zeichnen des Graphen			double y = funktion(x); // Berechnung des y-Werts der Funktion			p.lineTo((paintwidth/2)+(x*(1*zoom * xFaktor)),(paintheight/2)-(y*(1*zoom * yFaktor))); // Nächster Punkt des Pfades 													// Umrechnung von math.Koordinate auf Pixelwert		 			x = x + (1/(zeichenqualitaet*xFaktor)); // Zeichnen vom nachfolgenden x-Wert 			// Die Zahl "zeichenqualitaet" ist die Abstufung wie viele Punkte gezeichnet werden			// durch diese Abstufung ergibt sich zB auch die Lücke bei 0 bei f(x)=sqrt(x)		}		g2.setColor(graphenfarbe);		g2.draw(p); // Zeichen des Graphens	}		private double funktion(double x){		double y;		y = x*x;							// Funktion mit Variable x		return y;	}}Berechnungen.java:public class Berechnungen {		public Berechnungen () {			}		public double funktion(double x){		double y;		y = Math.sin(x);							// Funktion mit Variable x		return y;	}}Zeichnen.java:import java.awt.Color;import java.awt.Graphics2D;import java.awt.geom.GeneralPath;public class Zeichnen {		private int zeichenqualitaet=12;		private Color graphenfarbe = Color.black; //Farbe des Graphen beim Start		public Zeichnen(){					}			public void graphzeichnen(Graphics2D g2, int paintheight, int paintwidth,int zoom,double xFaktor,double yFaktor)		{		Berechnungen Berechnungen = new Berechnungen();				GeneralPath p = new GeneralPath(); //Pfad wird erstellt		double x =  0-(paintwidth / 2); // Bildanfangskoordinate in Mathematische														// x-Koordinate umformen					//Zeichnung wird genauer und Zeichnen beschleunigen indem ungültige Werte abgefangen werden		while((Double.isNaN(Berechnungen.funktion(x)))){ //Überprüft ob der Wert eine Zahl ist						//System.out.println(" X Wert: "+ x);			x=x+0.01;		}				p.moveTo((paintwidth/2)+(x*(1*zoom * xFaktor)), (paintheight/2)-(Berechnungen.funktion(x)*(1*zoom * yFaktor))); // Anfangspunkt des Pfades			while (x <= paintwidth) { // Schleife zum Zeichnen des Graphen			double y = Berechnungen.funktion(x); // Berechnung des y-Werts der Funktion			p.lineTo((paintwidth/2)+(x*(1*zoom * xFaktor)),(paintheight/2)-(y*(1*zoom * yFaktor))); // Nächster Punkt des Pfades 													// Umrechnung von math.Koordinate auf Pixelwert		 			x = x + (1/(zeichenqualitaet*xFaktor)); // Zeichnen vom nachfolgenden x-Wert 			// Die Zahl "zeichenqualitaet" ist die Abstufung wie viele Punkte gezeichnet werden			// durch diese Abstufung ergibt sich zB auch die Lücke bei 0 bei f(x)=sqrt(x)		}		g2.setColor(graphenfarbe);		g2.draw(p); // Zeichen des Graphens	}	public Color getGraphenfarbe() {		return graphenfarbe;	}	public void setGraphenfarbe(Color graphenfarbe) {		this.graphenfarbe = graphenfarbe;	}	public int getZeichenqualitaet() {		return zeichenqualitaet;	}	public void setZeichenqualitaet(int zeichenqualitaet) {		this.zeichenqualitaet = zeichenqualitaet;	}}