jPanelに1つの問題があります。 文字列入力(数式)からPNG画像を取得し、jPanelで古い画像を再描画するボタンがあります。そしてそこに問題が起こります。画像が変更されましたが、jPanelは手動でアプリウィンドウのサイズを変更するまで再描画しません。アプリケーションウィンドウのサイズを変更するまでjPanelがリフレッシュされない
サイズ変更するまでパネルを再描画しないように見えます。しかし、私はどのようにそのボタンでそれを行うか分かりません。
私はthisとthisを試しましたが、変更はありませんでした。
btw。私はnetbeansでGUIビルダーを使用しています。
私のコード...最初の試み:
public class ImagePanel extends JPanel {
private String path;
Image img;
public ImagePanel() {
try {
//save path
path = "Example5.png";
//load image
img = ImageIO.read(new File(path));
} catch (IOException ex) {
}
}
@Override
public void paint(Graphics g) {
//draw the image
if (show) {
try {
if (img != null) {
img = ImageIO.read(new File(path));
g.drawImage(img, 0, 0, this);
}
} catch (IOException ex) {
}
} else {
show = true;
}
}
}
とWindowクラスで/ボタン方式:
imagePanel = new ImagePanel();
imagePanel.repaint();
imagePanel.updateUI();
第二の試み:
public class ImagePanel extends JPanel {
private String path;
Image img;
ImagePanel(Image img) {
this.img = img;
}
public void setImg(Image img) {
this.img = img;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw image centered in the middle of the panel
g.drawImage(img, 0, 0, this);
}
}
とボタン:
imagePanel.setImg(new ImageIcon("2.png").getImage());
imagePanel.repaint();
ウィンドウを開くときにパネルが描かれますしていますか?それとも完全に見えないのですか?レイアウトマネージャが境界をまだ計算していない場合、パネルのサイズは0/0です。 – Thomas
画像を追加するときにjPanelが無効になっているかどうか確認できますか?サイズを変更するとvalidateTreeが呼び出され、レイアウトマネージャはその子を検証します – maress
呼び出しrevalidate(); repaint();の前に? – StanislavL