質問
私はJPanelの上の異なる図面を表示する必要があります。
...私は配列に図面ファイルを入れているが、私はボタンを使用して、それを変更したときに、JPanelのは最初の図面を表示し、次の描画に変更されません。私は)(panel.revalidateと呼ばれているが、それは仕事をdoesntの。
これは私が使用されるが、動作していないコードのセグメントです。 JPanelの表示が静的でした。
String[] a = {"image1.txt","image2.txt","image3.txt"};
List<String> files = Arrays.asList(a);
public void actionPerformed(ActionEvent e) {
if (e.getSource() == answer1){
fileNumber++;
//call other class for painting (files=array files, fileNumber=index of the array)
draw = new drawingPanel(files,fileNumber);
panel.add(draw);
}
panel.revalidate();
panel.repaint();
}
解決
あなたは<のhref = "http://java.sun.com/javase/6/docs/api/java/awt/Container.html#remove(java.awtあなたdrawingPanelへの参照を保持して呼び出してみてください.Component)」のrel = "nofollowをnoreferrerは">それを再度追加する前に、既存のdrawingPanelに()のを削除します。 のJPanel のJavaDocで、レイアウトによると、 FlowLayoutのには、デフォルトである - これはしませんあなたが意図しているように画像を交換するが、その代わりに前の1の右隣にdrawingPanelを配置します。 (ウィンドウのサイズを変更するとき何が起こる?)
ところで、どのようにあなたは、配列内の最後の画像を乗り越えるケースを扱うのですか?
他のヒント
あなたは、一度に1つの図面を表示していますか?もしそうなら、あなたはCardLayoutを使用しようとする場合がありますので、あなたは簡単に図面を切り替えることができます。 http://java.sun.com/docs/booksを参照してください。例えば/tutorial/uiswing/layout/card.html の
私は同様の問題に動的にユーザーが選んだのJTabbedPaneのどのタブによって、私のUI上の別のボタンを表示しようとする他の日でした。 CardLayoutは、物事を容易にするだけのものだった。