十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
iTopoview是专门面向网络拓扑图领域的界面组件,基于标准版Java(J2SE) Swing和Java2D图形技术,可在Web applet或GUI应用程序中使用。开发人员无需了解任何图形技术,通过简单的数据驱动方式,即可创建出专业高效的网络拓扑图界面,并且集成了菜单、鼠标、用户业务数据、告警等操作, 使用iTopoview可以将网络拓扑图开发的工作量从传统的数个人.月缩减到一个星期左右,让开发人员将重点迅速焦距至客户业务。
成都创新互联公司专注于临夏州企业网站建设,响应式网站,成都做商城网站。临夏州网站建设公司,为临夏州等地区提供建站服务。全流程按需设计,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
你要画波形图这个肯定是可以的,但是JAVA没有这个波形图显示控件,你要自己开发一个显示控件。
获得显示坐标和波形图的代码呢,方法比较多,以前我在.NET里做,画图用的那个GDI+来实现坐标和画图的。
简单的画个圆啥的就可以用那个自带的类啊,以下代码仅供参考。
java.awt
类 Graphics
Graphics 类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
Graphics 对象封装了 Java 支持的基本呈现操作所需的状态信息。此状态信息包括以下属性:
要在其上绘制的 Component 对象。
呈现和剪贴坐标的转换原点。
当前剪贴区。
当前颜色。
当前字体。
当前逻辑像素操作函数(XOR 或 Paint)。
当前 XOR 交替颜色(参见 setXORMode(java.awt.Color))。
坐标是无限细分的,并且位于输出设备的像素之间。绘制图形轮廓的操作是通过使用像素大小的画笔遍历像素间无限细分路径的操作,画笔从路径上的锚点向下和向右绘制。填充图形的操作是填充图形内部区域无限细分路径操作。呈现水平文本的操作是呈现字符字形完全位于基线坐标之上的上升部分。
用一个timer来定时改变X的坐标再套用sin(x)计算出y,绘制打点。向右传播x自加或者加固定值,定时器执行一次或多次触发重绘一次画布。
希望对你有帮助。
package com.tur.demo;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
class DataReceiver extends JPanel {
private ListInteger values; // 保存接收到的数据的容器.
private static final int MAX_VALUE = 200; // 接收到的数据的最大值.
private static final int MAX_COUNT_OF_VALUES = 50; // 最多保存数据的个数.
public DataReceiver() {
values = Collections.synchronizedList(new ArrayListInteger());
// 使用一个线程模拟产生数据.
new Thread(new Runnable() {
@Override
public void run() {
Random rand = new Random();
try {
while (true) {
addValue(rand.nextInt(MAX_VALUE)); // 产生一个数据,并模拟接收并放到容器里.
repaint();
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int w = getWidth();
int h = getHeight();
int xDelta = w / MAX_COUNT_OF_VALUES;
int length = values.size();
for (int i = 0; i length - 1; ++i) {
g2d.drawLine(xDelta * (MAX_COUNT_OF_VALUES - length + i), normalizeValueForYAxis(values.get(i), h),
xDelta * (MAX_COUNT_OF_VALUES - length + i + 1), normalizeValueForYAxis(values.get(i + 1), h));
}
}
/**
* 接收到的数据放入内存.
* @param value
*/
private void addValue(int value) {
// 循环的使用一个接收数据的空间.
// 最好是实现一个循环数组,而不是偷懒的使用ArrayList.
if (values.size() MAX_COUNT_OF_VALUES) {
values.remove(0);
}
values.add(value);
}
/**
* 规一化y轴方向的值. 使得value在y轴的值为[0, height]之间.
*
* @param value
* @param height
* @return
*/
private int normalizeValueForYAxis(int value, int height) {
return (int) ((double) height / MAX_VALUE * value);
}
private static void createGuiAndShow() {
JFrame frame = new JFrame("");
frame.getContentPane().add(new DataReceiver());
// Set frame's close operation and location in the screen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
createGuiAndShow();
}
}
将代码中需要的数值从数据库查出即可