如果我们想要改变"实时"某些数据,我想知道如何刷新图表.我的意思是,例如,我有一个带有TaskSeries的图表,该图表出现在3年后我希望将3年改为5年.我希望图表立即改变.
是否有某种更新图表或类似的东西?
我知道您可以说"获取您的TaskSeries,进行更改并自动刷新",但我的TaskSeries已生成,我无法轻易更改这些.这就是为什么我想找到一种重新计算和重建整个图表的方法.
我正在使用这个练习作为教学工具来帮助我学习一些Java GUI编程概念.我正在寻找的是一般性的理解,而不是一个特定问题的详细解决方案.我希望编码这个"正确"将教会我如何处理未来的多线程问题.如果这对于这个论坛来说太笼统了,那么它可能属于程序员吗?
我正在模拟读卡器.它有一个GUI,允许我们将卡加载到料斗中并按下Start等,但它的主要"客户端"是CPU,在单独的线程上运行并请求卡.
读卡器保持单个缓冲区.如果卡片请求进入且缓冲区为空,读卡器必须从料斗读取卡片(需要1/4秒,这是1962年).在将卡读入缓冲区后,读卡器将缓冲区发送到CPU,并在下一个请求之前立即启动另一个缓冲区加载操作.
如果不仅缓冲器是空的,而且料斗中没有卡,那么我们必须等到操作员将料斗放入料斗并按下Start(它始终启动缓冲加载操作).
在我的实现中,卡请求以invokeLater() Runnables在EDT上排队的形式发送到读卡器.在myRunnable.run()时间,无论是一个缓冲器将可用(在这种情况下,我们可以将其发送到CPU和开球另一个缓冲器负载操作),或缓冲区将是空的.如果它是空的怎么办?
两种可能性:(a)飞行中已经有缓冲加载操作,或(b)卡漏斗是空的(或尚未启动).在任何一种情况下,让EDT等待是不可接受的.工作(和等待)必须在后台线程上完成.
为了简单起见,我尝试生成一个SwingWorker来响应每个卡请求,而不管缓冲区的状态如何.伪代码是:
SwingWorker worker = new SwingWorker<Void, Void>() {
public Void doInBackground() throws Exception {
if (buffer.isEmpty()) {
/*
* fill() takes 1/4 second (simulated by Thread.sleep)
* or possibly minutes if we need to have another
* card deck mounted by operator.
*/
buffer.fill();
}
Card card = buffer.get(); // empties buffer
/*
* Send card to CPU
*/
CPU.sendMessage(card); // <== (A) put card in msg queue …Run Code Online (Sandbox Code Playgroud) 我正在编写一个需要在屏幕上平滑滚动波形的java应用程序.我花了很多年的时间通过各种教程来弄清楚如何使这个动画尽可能顺畅.据我所知,我已经做了所有正常的事情来消除闪烁(绘制到屏幕外缓冲区并一步渲染,加上覆盖更新,因此屏幕不会消隐),但我的动画仍然闪烁,屏幕在每次更新之前看起来都被清空了.
我确信有一些基本的(也可能是简单的)我错过了,但我没有想法.我将在下面发布一个说明问题的课程.任何帮助将非常感激.
import java.awt.*;
import javax.swing.*;
public class FlickerPanel extends JPanel implements Runnable {
private float [] pixelMap = new float[0];
/** Cached graphics objects so we can control our animation to reduce flicker **/
private Image screenBuffer;
private Graphics bufferGraphics;
public FlickerPanel () {
Thread t = new Thread(this);
t.start();
}
private float addNoise () {
return (float)((Math.random()*2)-1);
}
private synchronized void advance () {
if (pixelMap == null || pixelMap.length == 0) return;
float [] newPixelMap = new …Run Code Online (Sandbox Code Playgroud) 在非常基本的术语中,我有一个面板逐个像素地绘制一条线,并且正在实时更新.除此之外,我想要另一个面板,它围绕当前像素绘制一个框,但稍后会自行清除.两者都是实时的
我目前的情况是包装JPanel有一个OverlayLayout.底部面板具有Graphics2D从其中获取的对象绘制的线JPanel.顶部面板后面的框也是使用从其获取的Graphics2D对象绘制的JPanel.
这个系统中的问题很多.因为我只是Graphics2D单独绘制对象而不是覆盖JPanel paint(),所以当面板需要重新绘制时,不仅所有线都丢失了,我想我只是通过单个线程更新屏幕来反对Swing的线程模型.我还没有让顶部面板正常工作,它只是不断清理屏幕,不会让底部面板划一条线.
处理这种情况的最佳方法是什么?我对图像处理和Swing中图像的低级显示几乎没有经验,我只知道基础知识.我听说过BufferedImage,但不知道该放置该图像的位置,如果稍后更改它将会更新,这样做的效率,以及它缓冲的事实会吓跑我.我不知道该用什么
有人能指出我正确的方向,我需要用什么来实现这一目标?
假设我有像这样的心电图数据阵列
http://joachim.behar.perso.neuf.fr/Joachim/ECG_tuto_1/ECG_filters_basics/ecg_sample.txt
我需要使用这样的算法过滤50Hz的噪音
http://joachim.behar.perso.neuf.fr/Joachim/ECG_tuto_1/ECG_filters_basics/notch_filter.m
结果应该是如图2所示(红色过滤,蓝色 - 未过滤):

在Java/android中执行此操作的最佳方式是什么?这个图书馆会帮助https://sites.google.com/site/piotrwendykier/software/jtransforms吗?
谢谢!)
有人可以教我如何使用swing timer以下目的:
当我点击鼠标时,我需要有一个开始动画的多边形(简单的动画,如旋转); 当我再次点击时停止动画.
我没有理解MouseListener工作方式的问题,而是用实际的动画.我尝试在paint()方法中使用while块模拟动画,我将绘制,擦除和重绘多边形(例如模拟旋转),但在while内部,applet不会听取点击.它会在一段时间之后才会收听.当我点击鼠标时,我需要摆动计时器才能打破.
我在向XYSeries添加点时遇到问题.我有两节课.一个是Sample(它有一个main方法)而另一个是JfreeChart(它有JfreeChart代码).在我的Sample班级中,我有一个sample[row][2]最初有10行的2D数组,然后我需要调用JfreeChart该类并将它们添加到XYSeries并显示散点图.我设法做到了这一点,但下次我调用Jfreechart该类时,我的数组有25行.
我需要将值添加到XYSeries并在散点图上绘制它们,散点图应显示前面10行的不同颜色值,现在25行值不同颜色......这样就可以了.谁能提出一些建议或例子?
class Sample {
public static void main(String args[]) {
System.out.print("(X,Y) Paired Values");
double[][] sample = new double[row][2];
for (int g = 0; g < sampe.length; g++) {
for (int h = 0; h < 2; h++) {
System.out.print("" + sample[g][h] + ",");
}
}
JfreeChart sample = new JfreeChart("Demo", sample);
}
static XYDataset samplexydataset2(double[][] sample) {
XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
XYSeries …Run Code Online (Sandbox Code Playgroud) 我正在为我的第四年项目(处理功能反应式编程)开发一个小型示例应用程序.我们的想法是创建一个简单的程序,可以播放.wav文件,然后显示播放歌曲当前音量的"弹跳"动画(如音频录制软件).我在Scala中构建它,因此主要是查看Java库和现有解决方案.
目前,我已经设法轻松播放.wav文件,但我似乎无法实现第二个目标.基本上有一种方法可以解码.wav文件,这样我可以在任何给定的时间访问'音量'吗?按体积我认为我的意思是它的幅度,但我可能错了 - 高等物理学不久前......
显然,我对此一点都不太了解,所以如果有人能指出我正确的方向,那就太棒了!
我正在尝试在Java Swing中显示高宽度图像(比如2000x100,就像心率条一样).我需要只显示一个宽度为500的窗口,同时它向左略微移动.我当前的代码(有点复杂,它也有不必要的动画)这样做,但我需要添加的功能是:图像的结尾应该与图像的开头连接.所以它总是重复显示一遍又一遍.
总之,我需要加入图像的两端!我怎样才能做到这一点?

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class SlidingAnimation {
public static void main(String[] args) {
new SlidingAnimation();
}
public SlidingAnimation() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) …Run Code Online (Sandbox Code Playgroud) 该程序将每秒接收数据并在时间序列图表上绘制.但是,一旦我创建了两个系列,我就无法为其添加新值.它仅显示一条直线.

如何将数据附加到指定的系列?即YYY.基于这个例子,这是我正在做的事情:
...
// Data set.
final DynamicTimeSeriesCollection dataset =
new DynamicTimeSeriesCollection( 2, COUNT, new Second() );
dataset.setTimeBase( new Second( 0, 0, 0, 1, 1, 2011 ) );
dataset.addSeries( gaussianData(), 0, "XXX" );
dataset.addSeries( gaussianData(), 1, "YYY" );
// Chart.
JFreeChart chart = createChart( dataset );
this.add( new ChartPanel( chart ), BorderLayout.CENTER );
// Timer.
timer = new Timer( 1000, new ActionListener() {
@Override
public void actionPerformed ( ActionEvent e ) {
dataset.advanceTime();
dataset.appendData( new float[] …Run Code Online (Sandbox Code Playgroud) 我希望在我的Swing应用程序中有图表显示各种各样的数据 - 但每个图表的数据将不断变化.
类似于我的数据行为的一个很好的类比是系统的空闲和使用内存将如何(可能)在整个应用程序运行过程中上下波动.我希望图形看起来的一个很好的类比是Windows任务管理器中的CPU使用率图(不是指特定的颜色和网格,而是线图看起来的方式).
生成图表的最佳方法是什么,我将不断"追加"新的数据点.是定期添加这些点的最佳方法吗?
另外,我应该使用什么图表/图形API?我希望尽可能减少依赖关系,但我接受它们可能是必要的.
tl; dnr:我想创建一个类似于任务管理器中CPU使用率历史的图表,但是在Java中,用于Swing.