編集:
ここでも同じことを行いますが、問題は発生しません。
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 は、すべてを開始する main メソッドを持つメイン クラスです。
- Glowne okno は KeyListener であり、JFrame を拡張します。これには、MapaPanel、InfoLiniaPanel、KursPanel の 3 つの拡張 JPanel が含まれています。
- キーボードの「右矢印」を押すと、これら 3 つの拡張 JPanel で akutalizuj メソッド (更新メソッド) を呼び出す akutalizuj (更新を意味する) メソッドが実行されることを想定しています。これらのメソッドでは、repaint() が呼び出されます。
- クラス GlowneOkno で静的な長い開始を使用して、メソッド GlowneOkno:Aktualizuj がいつ呼び出されるかを確認し、次に、InfoLiniaKurs の paint method() で println(currentTime - GlowneOkno.start) を使用しました (これは時間が表示される場所です -> あなたは見る)。そして、この間隔は非常に遅いので、メソッド akutalizuj Mapa Panel でブロックすると、理由がわかりません
これが私が求めている大きなことであることは知っていますが、理由が見つからないのは5日目であり、質問を形成して、Eclipseですべてのプロジェクトを提供せずに知っておくべきことをすべてそこに置くことができず、あと5時間ほどあります。
プログラムは 1680 x 1050 で動作します
著作権 Robert Kilar 2012 ; )しかし、何らかの形で使用したい場合は、私に尋ねてください。喜んでお手伝いさせていただきます。
メインメインはGlowneOknoクラス。
ESC でアプリを閉じます。