「java函数绘图代码」编程画函数图
今天给各位分享java函数绘图代码的知识,其中也会对编程画函数图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 绘图函数 在哪个包里面
- 2、求java画初等函数图像,要求可以画任意函数,如sin(PI*x),pow(E,x),及其加减乘除后的函数
- 3、用Java编写的应用程序,输入函数表达式生成相应的函数图像,
- 4、在Java中如何用程序画一个圆
java 绘图函数 在哪个包里面
图形界面最最基本的类
JAVA的绘图功能非常丰富,绘图包括字体、颜色、图形,以下我们将分技术专题来讲。
一、关于JAVA的绘图机制。
JAVA中的任何一个图形组件,小到文本框、标签,大到一个FRAME,一个DIALOG,都有一个专门负责显示其界面的函数,这个函数名称是固定的:paint,它的原型为:
public void paint(Graphics g) { …… }
每当组件大小、位置、组件内容发生变化时,该函数即负责生成新的图形界面显示。由于该函数可以被子类继承,因此,继承的子类有能力修改该函数。如果子类中没有出现该函数,则表示其行为完全继承自父类。则不管是组件中是否添加了新的内容,是否发生了大小的改变,是否发生了位移,父类都要有一个专门的线程,来负责描绘变化以后的组件界面。
paint函数由父类自动维护,并且如果子类一旦重载该函数,必须自己去维护所有的界面显示。
二、设置画笔颜色
1、颜色常识
任何颜色都是三原色组成(RGB),JAVA中支持224位彩色,即红绿蓝色分量可取值介于0..255之间。下面首先学习一个JAVA中的类Color
Color中的常量:
public final static Color black=new Color(0,0,0);
public final static Color blue=new Color(0,0,255);
…..
Color的构造函数:
public Color(int r,int g,int b);
使用举例:如果想构造一个灰色对象,则用下面的句子:
Color gray=new Color(205,205,205);
2、设置画笔颜色语法
g.setColor(color); //color是一个Color对象
每修改一次颜色它影响的就是下面所有的绘图语句,一直影响到再次碰到setColor函数才以新的颜色代替。
3、使用JColorChooser组件选择颜色
JAVA中有一个已经定义好的选色器,通过简单的语法我们就可以将该窗口调出来,从其中选择自己喜欢的颜色。下面的这个例子就是通过颜色选取器选取颜色,并将选择到的颜色做为窗体的背景色。
(1)JColorChooser简介
JColorChooser组件的showDialog()方法让用户从弹出的窗口中选择一个颜色,并传给Color对象。其调用语法如下:
color=JColorChooser.showDialog(this,”选色”,color);
第一个参数指定调用选色器的父窗体,第二个参数指定选色器窗口标题,最后一个为接收颜色的颜色对象。
4、如何将一个图形(以文件存在,如JPG或者GIF)画到窗体的画布中 其实放置图形到画板中实际就是调用了画板的drawImage函数。其大致思路如下:
首先获取一个ImageIcon对象,这个对象将会从指定的文件中读取相关图象信息,它支持GIF和JPG、BMP等基本图象格式。语法如下:
ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"));
获取到图象的图标以后,就可以从图标中获取到绘制到画板上的实际需要的图象:
Image img=icon.getImage();
有了这个图象对象,我们就可以用画板的drawImage函数画图了。
g.drawImage(img,0,0,null);
中间两个参数是图象绘制时在画板的起始点坐标。 例如:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GraExp5 extends JFrame {
ImageIcon icon;
Image img;
public GraExp5() {
icon=new ImageIcon(GraExp5.class.getResource("1.gif"));
img=icon.getImage();
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setSize(new Dimension(400,300));
show();
}
public void paint(Graphics g) {
g.drawImage(img,0,0,null);
}
public static void main(String[] args)
{
GraExp5 ge=new GraExp5();
}
}
程序分析: 需要注意的是,图象文件所在的位置应该和该类放在同一个目录中,这样不至于出错。
6、系统扩展,综合应用,如何为一个窗体设置背景图片。
要为一个窗体添加背景图片,必须知道绘制JComponent组件的过程。Swing轻量组件的绘制是组件和组件UI代表合作的结果。
JComponent.paint先绘制组件,然后绘制组件的边框,再绘制组件的子组件。调用的顺序确保组件、边框和子组件都是可视的。如果组件有一个UI代表,则JComponent.paintComponent调用该代表的Update方法,该方法为不透明组件擦除背景,然后绘制组件。
CInstead是一个不透明的组件,如果重载paint方法,其背景图是无法被擦除的,因此,即使更新了组件的所有包含组件,在界面上是看不到的。所以必须重载paintComponent方法,在绘制子组件前先擦除背景。对双缓存组件,paint方法负责把组件绘制到屏外缓存中,然后把屏外缓存拷贝到组件的屏上代表中,正因为如此,我们不建议为Swing组件重载paint,如果需要重新定义如何绘制组件,那么就重载paintComponent()。
7、用可获取的字体、样式、字号修饰文字
(1)函数说明:
字形类Font用于规范组件所使用的字形大小、样式和字体等。其构造函数:
public Font(String name,int style,int size);
name表示本地可获取字体名称
style表示字体样式,包含Font.PLAIN,Font.BOLD,Font.ITALIC三种,分别对应平体、加粗和斜体。
一个有用的方法用来获取本地可用字体
GraphicsEnvironment
ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
String[]
fa=ge.getAvailableFontFamilyNames();
通过从绘图环境中获取到本地可用的字体名数组。
求java画初等函数图像,要求可以画任意函数,如sin(PI*x),pow(E,x),及其加减乘除后的函数
程序有点简陋,不过功能倒是全部实现了,你自己看吧
有些参数你自己可以调整
//这个程序哎,以后有机会再改进吧,至少坐标的移动我写的太烦了,可以直接指定的,擦
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class JFrame1 extends JFrame {
private JPanel1 jp;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame1 frame = new JFrame1();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public JFrame1() {
jp = new JPanel1();
jp.setBackground(Color.BLACK);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout(0, 0));
this.setBackground(Color.BLACK);
this.setContentPane(jp);
this.setSize(800, 600);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}
class JPanel1 extends JComponent{
int width,height;
int zx,zy;
int unit = 100; //单位长度包含的像素,也可考虑分别设置x,y轴的单位长度像素
public void paintComponent(Graphics g){
g.setColor(Color.BLACK);
width = this.getWidth();
height = this.getHeight();
// zx = 100;
// zy = 200;
zx = width/2; //新坐标系原点坐标位置,可以改变
zy = height/2;
g.setColor(Color.BLACK);
this.paintAxis(g);
this.paintMethod(g);
this.paintMethod1(g);
this.paintMethod2(g);
}
private void paintMethod(Graphics g1){
Point2D temp1,temp2;
double x,y;
Graphics2D g = (Graphics2D)g1;
g.setColor(Color.GREEN);
x = -1.0*zx/unit;
y = Math.pow(x, 3) ;
temp1 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
for(int i = 0 ; i width; i++){
x += 1.0/unit;
y = Math.pow(x, 3) ;
if ( Math.abs(y) zy){
temp2 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
g.draw(new Line2D.Double(temp1, temp2));
temp1 = temp2;
}
}
}
private void paintMethod1(Graphics g1){
Point2D temp1,temp2;
double x,y;
Graphics2D g = (Graphics2D)g1;
g.setColor(Color.BLUE);
x = -1.0*zx/unit;
y = Math.pow(Math.E, x) ;
temp1 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
for(int i = 0 ; i width; i++){
x += 1.0/unit;
y = Math.pow(Math.E, x) ;
if ( Math.abs(y) zy){
temp2 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
g.draw(new Line2D.Double(temp1, temp2));
temp1 = temp2;
}
}
}
private void paintMethod2(Graphics g1){
Point2D temp1,temp2;
double x,y;
Graphics2D g = (Graphics2D)g1;
g.setColor(Color.PINK);
x = -1.0*zx/unit;
y = Math.sin(Math.PI * x);
temp1 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
for(int i = 0 ; i width; i++){
x += 1.0/unit;
y = Math.sin(Math.PI * x);
if ( Math.abs(y) zy){
temp2 = new Point2D.Double(this.alterX(x * unit), this.alterY(y * unit));
g.draw(new Line2D.Double(temp1, temp2));
temp1 = temp2;
}
}
}
//画坐标轴,可以通过zx,zy的处置来改变原点位置;
private void paintAxis(Graphics g){
g.setColor(Color.CYAN);
g.drawLine(0, zy, width, zy);
g.drawLine(zx, 0, zx, height);
g.drawString("0",zx + 2,zy +12); //画原点数字
for(int i = 1; i*unit width; i++){
g.drawLine(zx + i*unit, zy - 10, zx + i*unit, zy);//x 正向
g.drawLine(zx - i*unit, zy - 10, zx - i*unit, zy);//x 负向
g.drawString(String.valueOf(i), zx + i*unit -3, zy + 12); // x轴数字
g.drawString(String.valueOf(i * -1), zx - i*unit -8, zy + 12); // x轴数字
g.drawLine(zx , zy + i*unit, zx + 10, zy + i*unit);//y 负向
g.drawLine(zx , zy - i*unit, zx + 10, zy - i*unit);//y 正向
g.drawString(String.valueOf(i), zx -12 , zy - i*unit + 5); // y轴数字
g.drawString(String.valueOf(i * -1), zx -12 , zy + i*unit + 5); // y轴数字
}
}
private double alterX(double x){ //新坐标对应的原坐标
return x + zx;
}
private double alterY(double y){ //新坐标对应的原坐标
return -1 *( y - zy);
}
}
用Java编写的应用程序,输入函数表达式生成相应的函数图像,
java语言输入函数表达式生成相应的函数图像代码如下:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class UI extends JFrame
{
MyPanel mp;
JPanel pl = new JPanel();
JPanel pl1 = new JPanel(),
pl2 = new JPanel(),
pl3 = new JPanel(),
pl4 = new JPanel();
JRadioButton rb1,rb2;
ButtonGroup bg = new ButtonGroup();
JTextField tf = new JTextField(16);
String[] s = {"y = sin(x)", "y = cos(x)", "y = tan(x)",
"y = pow(x, 2)", "y = pow(x, 3)", "y = log(x)",
"y = pow(2, x)", "y = sqrt(x)", "r = a(sita)"};
JComboBox cb;
JButton bn1 = new JButton("变宽"),
bn2 = new JButton("变窄"),
bn3 = new JButton("拉长"),
bn4 = new JButton("压短"),
bn = new JButton("绘图"),
exit = new JButton("退出"),
bn5 = new JButton("左移"),
bn6 = new JButton("右移"),
bn7 = new JButton("上移"),
bn8 = new JButton("下移");
public UI()
{
mp = new MyPanel(this);
pl1.setLayout(new GridLayout(1, 2));
pl2.setLayout(new GridLayout(1, 2));
pl3.setLayout(new GridLayout(1, 2));
pl4.setLayout(new GridLayout(1, 2));
pl1.add(bn1); bn1.setEnabled(false);
pl1.add(bn2); bn2.setEnabled(false);
pl2.add(bn3); bn3.setEnabled(false);
pl2.add(bn4); bn4.setEnabled(false);
pl3.add(bn5); bn5.setEnabled(false);
pl3.add(bn6); bn6.setEnabled(false);
pl4.add(bn7); bn7.setEnabled(false);
pl4.add(bn8); bn8.setEnabled(false);
pl.setLayout(new GridLayout(20, 1));
rb1 = new JRadioButton("输入函数");
rb2 = new JRadioButton("选择已有函数");
rb2.setSelected(true);
tf.setEnabled(false);
bg.add(rb1); bg.add(rb2);
rb1.addActionListener(mp);
rb2.addActionListener(mp);
pl.add(rb1);
pl.add(tf);
pl.add(rb2);
cb = new JComboBox(s);
pl.add(cb);
pl.add(new JLabel());
pl.add(pl1); pl.add(pl2);
pl.add(pl3); pl.add(pl4);
pl.add(bn);
pl.add(exit);
bn1.addActionListener(mp);
bn2.addActionListener(mp);
bn3.addActionListener(mp);
bn4.addActionListener(mp);
bn5.addActionListener(mp);
bn6.addActionListener(mp);
bn7.addActionListener(mp);
bn8.addActionListener(mp);
bn.addActionListener(mp);
exit.addActionListener(mp);
this.setLayout(new BorderLayout());
this.add(mp, BorderLayout.CENTER);
this.add(pl, BorderLayout.EAST);
this.setTitle("平面直角坐标系画图小工具");
this.setSize(797, 600 + 37);
Dimension dn = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((dn.width - 797) / 2, (dn.height - 637) / 2);
this.setVisible(true);
this.setDefaultCloseOperation(3);
}
public static void main(String[] args)
{
new UI();
}
}
package math;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements ActionListener,MouseMotionListener
{
UI ui;
int flag;
double h_times;
int w_times;
int dx;
int dy;
String str;
Point pt = new Point(0, 0);
void init()
{
flag = -1;
h_times = Math.PI / 100;
w_times = 100;
dx = 300;
dy = 300;
}
public MyPanel(UI ui)
{
this.addMouseMotionListener(this);
init();
this.ui = ui;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
drawCoordinate(g2);
Line2D line;
g2.setColor(Color.BLUE);
g2.drawString("(" + (pt.x - 300) + ", " + (300 - pt.y) + ")", pt.x + 20, pt.y + 20);
switch(flag)
{
case 0:
g2.drawString("y = Asin(Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.sin(getReal_X(i)) * w_times, i + 1, dy - Math.sin(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 1:
g2.drawString("y = Acos(Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.cos(getReal_X(i)) * w_times, i + 1, dy - Math.cos(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 2:
g2.drawString("y = Atan(Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.tan(getReal_X(i)) * w_times, i + 1, dy - Math.tan(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 3:
g2.drawString("y = Apow(Bx + C, 2) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 2) * w_times, i + 1, dy - Math.pow(getReal_X(i + 1), 2) * w_times);
g2.draw(line);
}
break;
case 4:
g2.drawString("y = Apow(Bx + C, 3) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 3) * w_times, i + 1, dy - Math.pow(getReal_X(i + 1), 3) * w_times);
g2.draw(line);
}
break;
case 5:
g2.drawString("y = Alog(Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.log(getReal_X(i)) * w_times, i + 1, dy - Math.log(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 6:
g2.drawString("y = Apow(2, Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.pow(2, getReal_X(i)) * w_times, i + 1, dy - Math.pow(2, getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 7:
g2.drawString("y = Asqrt(Bx + C) + D", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(i, dy - Math.sqrt(getReal_X(i)) * w_times, i + 1, dy - Math.sqrt(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
case 8:
g2.drawString("y = a(sita)", 105, 60);
for(double i = 0; i 600; i += 0.01)
{
line = new Line2D.Double(getReal_X(i) * Math.cos(getReal_X(i)), dy - getReal_X(i) * Math.sin(getReal_X(i)) * w_times, getReal_X(i) * Math.cos(getReal_X(i + 1)), dy - getReal_X(i) * Math.sin(getReal_X(i + 1)) * w_times);
g2.draw(line);
}
break;
}
if(flag != -1)
{
g2.drawString("A = " + w_times, 105, 90);
g2.drawString("B= " + h_times, 105, 120);
g2.drawString("C= " + (300 - dx), 105, 150);
g2.drawString("D= " + (300 - dy), 105, 180);
}
}
private double getReal_X(double x)
{
return (x - dx) * h_times;
}
private void drawCoordinate(Graphics2D g2)
{
int len = 20;
Line2D line;
for(int i = 0; i = 600 / len; i++)
{
g2.setColor(Color.PINK.darker());
if(i == 300 / len)
g2.setColor(Color.RED);
else;
line = new Line2D.Double(0, i * len, 600, i * len);
g2.draw(line);
line = new Line2D.Double(i * len, 0, i * len, 600);
g2.draw(line);
}
drawPoint(g2, 300, 300);
}
private void drawPoint(Graphics2D g2, double x, double y)
{
g2.setColor(Color.YELLOW);
Ellipse2D circle = new Ellipse2D.Double(x - 2, y - 2, 4, 4);
g2.fill(circle);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == ui.rb1)
{
ui.tf.setEnabled(true);
ui.cb.setEnabled(false);
flag = -1;
}
if(e.getSource() == ui.rb2)
{
ui.tf.setEnabled(false);
ui.cb.setEnabled(true);
}
if(e.getSource() == ui.bn1)
{
h_times /= 1.1;
}
if(e.getSource() == ui.bn2)
{
h_times *= 1.1;
}
if(e.getSource() == ui.bn3)
{
// ui.bn4.setEnabled(true);
w_times += 10;
// if(w_times = 300)
// ui.bn3.setEnabled(false);
}
if(e.getSource() == ui.bn4)
{
// ui.bn3.setEnabled(true);
w_times -= 10;
// if(w_times = 0)
// ui.bn4.setEnabled(false);
}
if(e.getSource() == ui.bn5)
{
dx -= 10;
}
if(e.getSource() == ui.bn6)
{
dx += 10;
}
if(e.getSource() == ui.bn7)
{
// ui.bn8.setEnabled(true);
dy -= 10;
// if(dy = 0)
// ui.bn7.setEnabled(false);
}
if(e.getSource() == ui.bn8)
{
// ui.bn7.setEnabled(true);
dy += 10;
// if(dy = 600)
// ui.bn8.setEnabled(false);
}
if(e.getSource() == ui.bn)
{
if(ui.tf.isEnabled() == true)
{
str = ui.tf.getText();
if(str == null || str.length() == 0)
{
ui.bn1.setEnabled(false);
ui.bn2.setEnabled(false);
ui.bn3.setEnabled(false);
ui.bn4.setEnabled(false);
ui.bn5.setEnabled(false);
ui.bn6.setEnabled(false);
ui.bn7.setEnabled(false);
ui.bn8.setEnabled(false);
JOptionPane.showMessageDialog(this, "请输入函数表达式 !");
return;
}
}else flag = -2;
ui.bn1.setEnabled(true);
ui.bn2.setEnabled(true);
ui.bn3.setEnabled(true);
ui.bn4.setEnabled(true);
ui.bn5.setEnabled(true);
ui.bn6.setEnabled(true);
ui.bn7.setEnabled(true);
ui.bn8.setEnabled(true);
init();
if(ui.cb.isEnabled() == true)
{
flag = ui.cb.getSelectedIndex();
}
}
if(e.getSource() == ui.exit)
System.exit(0);
repaint();
}
public void mouseDragged(MouseEvent arg0)
{
}
public void mouseMoved(MouseEvent e)
{
pt = e.getPoint();
repaint();
}
}
在Java中如何用程序画一个圆
使用java画圆要用到绘图类Graphics,下面是实例代码和运行效果:
package com.dikea.demo01;
import java.awt.*;
import javax.swing.*;
// java绘图原理
public class demo_01 extends JFrame {
MyPanel mp = null;
public static void main(String[] args) {
// TODO 自动生成的方法存根
demo_01 demo01 = new demo_01();
}
public demo_01(){
mp = new MyPanel();
this.add(mp);
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
// 定义一个MyPanel面板,用于绘图区域
class MyPanel extends JPanel{
//覆盖JPanel
// Graphics 是绘图的重要类,可以理解成一支画笔
public void paint(Graphics g){
// 1. 调用父类函数完成初始化任务
// 这句话不可以少
super.paint(g);
// 先画出一个圆圈
g.drawOval(100, 100, 30, 30);
}
}
代码复制进ide编程工具,运行效果如下:
关于java函数绘图代码和编程画函数图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。