我在使用contentPane時遇到問題。這裏的代碼有問題:爲什麼在這個代碼中不會更新contentPane。
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);
}
}
圖只是一個組件,容易peasy。當我點擊右箭頭時,我想用數組中的下一個替換當前顯示的Graph,當我點擊左箭頭時,我想用圖中的前一個替換Graph。
奇怪的是,當我打右,它工作得很好。但是,當我左擊時,Graph不會改變。索引改變了,因此我知道代碼已經到達,但GUI不會改變。
現在爲此做好準備。當我註釋出正確的鍵的確認行時,左邊的鍵將工作大約一半的時間。那裏發生了什麼?如果您想運行並查看自己的文件(只有一個文件),請執行以下代碼:http://pastebin.com/qWxWrypK。我目前使用的初始參數是T = 1,dt = .01,L = 1,h = .05。
我一直在尋找到它,我想這可能是因爲JFrame的contentPane的確實是一個JPanel,但想着該行沒有取得任何進展......
感謝所有幫助
編輯:
所以我仍然在使用它。這是另一個奇怪的事情。如果我將KeyList類中的索引設置爲timeSlices-1(基本上得到圖表數組中的最後一個圖),並且我向左擊,它就可以工作!但是,現在的權利並沒有!奇怪的事情必須繼續與數組或東西,因爲索引更改就好了。嗯。
編輯:
數組正在發生變化。出於某種原因,圖形只能使用一次。也許它在移除時被破壞?或類似的東西...
將您運行程序的參數值添加到您的文章中。沒有他們我甚至不能啓動你的程序。 – MockerTim
對不起。忘記我是這樣做的(我在開始時就讓他們硬編碼)。 – mtheoryninja