当我每500毫秒调用PaintComponent()
来显示更新的图表时,我面临着呈现问题。我使用Panel
上的JFreeChart
创建了大约30个Barchart。
有错误的渲染和我如何解决这个问题?
private void ShowGraphs() {
FirstChart.removeAll();
SecondChart.removeAll();
ThirdChart.removeAll();
FirstChart.add(Label1);
SecondChart.add(Label2);
ThirdChart.add(Label3);
ChartUpdate(P1,FirstChart);
ChartUpdate(P2,SecondChart);
ChartUpdate(P3,ThirdChart);
//FirstChart, SecondChart, ThirdChart is JPanels
//Tabb is JTabbedPane
paintComponents(Tabb.getGraphics());
}
此代码每500毫秒调用一次,ChartUpdate(MyObject,Panel)
是使用MyObject
的信息在Panel
上构建图表的函数。
不要替换视图组件。相反,更新相应的模型,监听视图将自我更新作为响应。在下面的示例中,createPane()
返回的每个ChartPanel
都有一个Swing计时器
,该计时器每500 ms更新其XYSeries
。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* @see http://stackoverflow.com/a/38512314/230513
* @see http://stackoverflow.com/a/15715096/230513
* @see http://stackoverflow.com/a/11949899/230513
*/
public class Test {
private static final int N = 128;
private static final Random random = new Random();
private int n = 1;
private void display() {
JFrame f = new JFrame("TabChart");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < 3; i++) {
p.add(createPane());
}
f.add(p, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private ChartPanel createPane() {
final XYSeries series = new XYSeries("Data");
for (int i = 0; i < random.nextInt(N) + N / 2; i++) {
series.add(i, random.nextGaussian());
}
XYSeriesCollection dataset = new XYSeriesCollection(series);
new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
series.add(series.getItemCount(), random.nextGaussian());
}
}).start();
JFreeChart chart = ChartFactory.createXYLineChart("Test", "Domain",
"Range", dataset, PlotOrientation.VERTICAL, false, false, false);
return new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(480, 240);
}
};
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().display();
}
});
}
}
我用基本的图形用户界面创建了一个小画板程序。我使用了画图组件方法。我想每毫秒更新正在绘制的图形。这样,用户可以在释放鼠标点击之前看到他们将要绘制的内容。例如,如果我正在绘制一个矩形,我想在绘制矩形时看到它。如果你不明白我到底在说什么,打开微软油漆,点击矩形工具。画一个矩形。注意它是如何持续更新的,而不是在释放鼠标后。我想一定有办法让它每毫秒更新我的图形。做这件事最好的方法是什么?抱歉,如果这是一个
我在Java中的JLabel存在一个渲染问题:我使用oberver observable模式,当我的模型通知我的视图JLabel已经更改了JLabel的内容,或者特别是在我的JLabel区域中显示的内容是随机的时。有时它渲染另一个面板中按钮的一部分,有时它渲染我在视图的其他组件中设置的颜色!但是,如果我最小化然后最大化我的帧,所有的渲染都是正确的。 对不起,我的英语不好。 EDIT这是我的JPan
我有一个swing应用程序,它在JScrollPane中包含一个SVG画布。应用程序修改显示的SVG文档,这也会导致文档大小的更改。此大小更改需要反映在应用程序中。调整SVG画布的大小,滚动JScrollPane的视口,以便它显示画布的正确部分。 然而,这导致了类似“视觉跳跃”的东西,因为用户首先看到画布大小的变化,然后看到滚动操作。 有没有一种方法可以告诉java停止处理给定组件(及其子组件)上
我正在尝试使用ffmpeg 4.3录制屏幕和音频。但在最终输出中,我的音频比视频慢500到1秒。为什么会这样?如何解决这个问题?以下是我在Windows 10计算机上使用的命令: ffmpeg。exe-threads 4-rtbufsize 1024m-f dshow-i audio=“麦克风(Realtek audio)”-f gdigrab-offset_x 0-offset_y 0-vide
问题内容: 我尝试运行RichFaces4应用,但组件未渲染。例如,当我尝试这个演示:演示时,我得到如下信息: 我的代码与演示中的代码几乎相同。我刚刚添加了表单标签,因为它对此有所抱怨。 问题答案: 这就是Crome开发人员工具告诉我的内容 http://img571.imageshack.us/i/rfnotdefined.jpg (未捕获的ReferenceError:未定义RichFaces
This group contains all Components that have to do with rendering in-game and user interface elements. Lighting and special effects are also included in this group. 这个组包括在游戏中渲染和界面元素的所有组件。光照和特定效果也包含在这个