编辑:
我在这里做同样的事情,但问题不会发生。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
public class MainFrame extends JFrame implements KeyListener {
static long start;
MyPanel right, left;
public MainFrame() {
}
public void go(){
setUndecorated(true);
setLocation(0, 0);
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setSize(screenSize);
addKeyListener(this);
setLayout(new GridLayout(1,0));
Border b = BorderFactory.createLineBorder(Color.black, 4);
Border b1 = BorderFactory.createLineBorder(Color.blue, 4);
right = new MyPanel();
left = new MyPanel();
right.setBorder(b); left.setBorder(b1);
add(left);add(right);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void update() {
left.update();
right.update();
}
@Override
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE)
System.exit(1);
else if (arg0.getKeyCode() == KeyEvent.VK_RIGHT){
start = System.currentTimeMillis();
update();
}
}
@Override
public void keyReleased(KeyEvent arg0) {}
@Override
public void keyTyped(KeyEvent arg0) {}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame().go();
}
});
}
}
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyPanel extends JPanel {
MyPanel(){
super();
}
public void update(){
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println(System.currentTimeMillis() - MainFrame.start);
}
}
首先,我想说我已经准备好了一些例子,假设显示我的问题,但问题没有出现在这个示例代码中,它只在原始程序中。我知道阅读起来很糟糕,但它会有很大的帮助,因为问题在特定的地方,你不需要了解其余的代码,甚至只需要修改几行。
我知道这是我要问的重要事情,但这是第五天我找不到理由而且我无法形成问题并将所有应该知道的事情放在那里而不给所有项目Eclipse和我还有5个小时。
该计划适用于1680 x 1050
版权所有Robert Kilar 2012; )但如果你想以某种方式使用它只是问我。我很乐意帮忙。
主要的主要是GlowneOkno类。
ESC关闭应用程序。
答案 0 :(得分:4)
仔细查看重新绘制所需的每个步骤。
InfoLinePane
需要呈现文字和时间。虽然这本身并不是一个困难的过程,但您可以考虑将其中的一部分卸载到缓冲的图像中,因为让我们面对它,只有时间会发生变化。当其他细节发生变化时,您可以使缓冲区无效并再次重新绘制它。mapaPanel
,而不考虑是否需要更改图像加载和缩放很昂贵。如果内存允许,您应该考虑缓存这些结果。缩放最好在后台实现。使用低质量进行缩放以将高质量标度开始并卸载到单独的thread
考虑实际发生了什么变化。将(通常)不会改变的所有内容渲染为缓冲区。