私はcontentPaneに問題があります。問題のコードは次のとおりです。なぜこのコードのcontentPaneを.validate()しないのですか?
public void graph() {
JFrame frame = new JFrame("Graph");
Graph[] graphs = new Graph[timeSlices];
int k = 0;
for (TreeMap<MyPoint, BigDecimal> prevU : prevUs) {
graphs[k] = new Graph(prevU);
k++;
}
// The KeyList handles switching between graphs.
frame.addKeyListener(new KeyList(frame.getContentPane(), graphs));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(810, 500);
frame.setVisible(true);
}
private class KeyList extends KeyAdapter {
private Container contentPane;
private Graph[] graphs;
private int index;
public KeyList(Container contentPane, Graph[] graphs) {
this.contentPane = contentPane;
this.graphs = graphs;
this.index = 0;
this.contentPane.add(this.graphs[0]);
}
public void keyPressed(KeyEvent e) {
// Go back a time step
if (e.getKeyCode() == KeyEvent.VK_LEFT && index > 0) {
contentPane.remove(graphs[index]);
contentPane.add(graphs[--index]);
contentPane.validate();
System.out.println(index);
}
// Go forward a time step
else if (e.getKeyCode() == KeyEvent.VK_RIGHT && index < timeSlices - 1) {
contentPane.remove(graphs[index]);
contentPane.add(graphs[++index]);
contentPane.validate();
System.out.println(index);
}
// Exit if Esc is hit
else if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
System.exit(0);
}
}
グラフは単なるコンポーネントであり、簡単です。私が右矢印を押すと、現在表示されているグラフを配列の次のグラフに置き換えたいのですが、左の矢印を押すと、配列内の前のグラフに置き換えます。
奇妙なことは、私が右を押すとうまくいくことです。しかし、私が左を押すと、グラフは変わらない。インデックスが変わるので、コードに到達していることがわかりますが、GUIは変更されません。
これで準備が整いました。私は、右のキーの検証ラインをコメントアウトすると、左のものは約半分の時間で動作します。そこには何が起こっているのですか?あなたが自分のために(1つのファイルだけ)実行して見たい場合は、残りのコードを次に示します:http://pastebin.com/qWxWrypK。私が現在使っている出発パラメタは、T = 1、dt = .01、L = 1、h = .05です。
私はそれに見ていた、私は任意のヘルプ
ためおかげで...たJFrameのcontentPaneでは本当にJPanelのですが、思考のラインがどこにも取得していないので、それはあるかもしれないと思いました
編集:
私はまだそれを使用しています。別の奇妙なことがあります。 KeyListクラスのインデックスをtimeSlices-1(基本的にグラフの配列で最後のグラフを取得)に設定し、私が左に当たったら、動作します!しかし、今は権利がありません!インデックスがうまく変わるので、何か不思議なことがアレイや何かで起こっているに違いありません。うーん。
編集:
何かがアレイで起こっています。何らかの理由で、グラフは一度しか使用できません。おそらく、それは除去時に破壊されているでしょうか?またはそのようなもの...
プログラムを実行するためのパラメータ値を投稿に追加します。それらがなければ私はあなたのプログラムを始めることさえできません。 – MockerTim
すみません。私はそれをやっていたことを忘れてしまった(私は彼らが最初にハードコードされていた)。 – mtheoryninja