JLabel での HTML レンダリングに問題があります。何が起こるかよくわかりませんが、setFadedVisible を初めて呼び出すと、html がレンダリングされていないサイズを計算し、ペイントし、html をレンダリングし、再計算して agian を再ペイントするようです。正しく再描画される前に、間違ったサイズを垣間見るだけですが、イライラするのに十分です. HTML 以外のテキストを textlabel に入れると、それは起こりません (それは私が推測する 1 行であるためです)。これで私を助けてもらえますか?
public class LevelEndLayeredPane extends FadedLayer {
...
private void showMessageAndSetVisible(String mes) {
mes = mes.replaceAll("\n", "<br>");
mes = "<html><center>" + mes + "</center></html>";
textLabel.setText(mes);
setFadedVisible(true);
}
...
}
public class FadedLayer extends JLayeredPane{
private JComponent fadedLayer;
private JComponent groundLayer;
private JComponent topLayer;
public FadedLayer(JComponent groundLayer) {
setLayout(new OverlayLayout(this));
setOpaque(false);
createFadedLayer();
add(groundLayer, Integer.valueOf(0));
add(fadedLayer, Integer.valueOf(1));
fadedLayer.setVisible(false);
}
public FadedLayer(JComponent groundLayer, JComponent topLayer) {
this(groundLayer);
setTopLayer(topLayer);
}
public void setFadedVisible(boolean show){
fadedLayer.setVisible(show);
}
public boolean isFadedVisible() {
return fadedLayer.isVisible();
}
...
}