-1

私の友人が私にプロジェクトを送ってくれて、もっときれいにするように頼みました。プロジェクトは、画像によって配置されたいくつかのラベルを持つコンテナーを持つ JFrame であり、いくつかのパラメーターに従って変化します。私がやろうとしたことは、すべてのラベルをJFrameのJPanel、問題は、ラベルが変更されないことです。パネルをいっぱいにしてマップを作成すると正常に動作しますが、画像を切り替える必要がある場合、ロガーでチェックしたため、論理は問題ありません(System.out.println のもの) で、正常に動作しています。また、私が作成した JPanel は、NetBeans のパレット (ドラッグ アンド ドロップ) で作成されたと言わざるを得ません。

public final void createMap(int map[][]) {
myGrid = new GridLayout(13, 16, 0, 0);
myLabel = new JLabel[13][16];
myPanel.setLayout(myGrid);

//Start doing some stuff to fill my JPanel with labels placing images on them.
//This works fine

 for(int i = 0; ...) {
  for(int j = 0; ...) {
   if(map[i][j]==0) {
    myLabel[i][j].setIcon(new javax.swing.ImageIcon(getClass().getResource("/ImageA.jpg")));
   }

   if (map[i][j]==1) {
    myLabel[i][j].setIcon(new javax.swing.ImageIcon(getClass().getResource("/ImageB.jpg")));
   }
   .
   .
   .
   myPanel.add(myLabel[i][j]);
   myPanel.revalidate();
  }
 }
//End doing some stuff
}

//The problem comes here when I try to switch images

public final void play() {

if(something) {
  //The position 2,3 "switches" its image with the position 2,4
  myLabel[2][3].setIcon(new javax.swing.ImageIcon(getClass().getResource("/ImageA.jpg")));
  myLabel[2][4].setIcon(new javax.swing.ImageIcon(getClass().getResource("/ImageB.jpg")));
 }
//THIS IS NOT WORKING
myPanel.validate();
}

myPanel.validate、.revalidate()、.repaint() を試しましたが、どれも機能しません。

どんな助けでも大歓迎です。前もって感謝します。

4

2 に答える 2

4
  • 場合によってIcon/ImageIconは機能しません (Web または HDD から吸い込まれます)。

.

     ImageIcon pictures = new ImageIcon("whatever");
     pictures.getImage().flush();
     myLabel[2][3].setIcon(pictures);

.

  • 解決策は非常に簡単です。すべての Icon/ImageIcon をローカル変数としてロードすると、Swing JComponents が問題を引き起こすことはありません
于 2013-05-23T07:29:39.080 に答える