编辑:
我在这里做同样的事情,但没有出现问题。
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);
}
}
首先我想说我准备了一个小例子来说明我的问题,但是这个例子代码中没有出现问题,它只是在原始程序中。我知道阅读起来很糟糕,但它会有很大帮助,因为问题出在特定的地方,你不需要理解其余的代码,甚至只需要润色几行。
- GlowneOkno 是一个主类,它有一个启动它的主方法。
- Glowne okno 是 KeyListener 和 Extends JFrame,它包含 3 个扩展的 JPanel:MapaPanel、InfoLiniaPanel、KursPanel。
- 当您按下键盘上的“右箭头”时,它假设运行 akutalizuj(它意味着更新)方法,该方法在这 3 个扩展的 JPanel 中调用 akutalizuj 方法(更新方法)。在这些方法中,调用了 repaint()。
- 我在 GlowneOkno 类中使用静态长启动来查看何时调用 GlowneOkno:Aktualizuj 方法,然后我在 InfoLiniaKurs 的绘制方法()中 println(currentTime - GlowneOkno.start)(这是显示时间的那个 -> 你会看)。而且这个时间间隔太慢了,我不知道为什么,如果我在方法 akutalizuj Mapa Panel 中阻塞
我知道这是我要问的一件大事,但这是我找不到理由的第五天,我无法提出问题并将您应该知道的所有内容放在那里,而无需在 Eclipse 中提供所有项目,而我还有 5 个多小时的时间。
程序工作在 1680 x 1050
罗伯特·基拉尔 2012 年版权所有;) 但如果你想以某种方式使用它,就问我。我很乐意提供帮助。
主要主要在 GlowneOkno 类。
ESC 关闭应用程序。