プロが教える店舗&オフィスのセキュリティ対策術

JavaAppletでJbuttonに表示する文字列の改行を実現した
サンプルページを参考にボタンを作成し、IE上で表示させたのですが

初期表示は問題なく動作するものの、表示したページを
再読込(リロード)すると、文字が消えてしまいます。
(再読込後の画面コピーを添付します)


リロード時にもボタンに表示された文字を表示させるためには
ブラウザの設定変更やコードの修正が必要なのでしょうか?

以下は、実行環境及びコードです。


環境
OS:WindowsXP
ブラウザ:IE7
JRE:1.6.0_26

※クラスファイル、HTMLファイルともにCドライブ直下に配置し実行。



ソース
○test.java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;

public class test extends JApplet {

private static final long serialVersionUID = 1L;

JButton button;

public void init() {

setBackground(Color.WHITE);
setLayout(new BorderLayout());
button = new JButton("<html>改行<br />ボタン</html>");
button.setPreferredSize(new Dimension(120,80));
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.add(button);
add(panel, BorderLayout.CENTER);
}

}



○test.html

<html>
<head></head>
<body>
<applet code="test.class" WIDTH=120 HEIGHT=100>
</applet>
</body>
</html>

「JButtonの改行したラベルがリロード」の質問画像

A 回答 (2件)

少し調べてみましたが、


バグとしてフォーラムの方に報告されていますね。
HTMLパーサを利用するコンポネントで今回の現象が発生している様です。

現象の解消方法ですが、上記アプレットのソース(test.java)の

public void init() {

の直後に

new javax.swing.text.html.parser.ParserDelegator();

を挿入してください。

public void init() {
new javax.swing.text.html.parser.ParserDelegator();

の様にすればリロードしてもボタンの内容が表示される事を確認しました。
確認環境:XP, JDK1.6.0_24, JRE1.6.0_24, IE8

ただ、拾い読みした程度の措置なので、
場当たり的な対応になっていると思います。
根本解決では無いので、TODOを残しつつバグフィックスを待った方が良いでしょうね。
それまではこのおまじないと付き合っていく事になりそうです。

後、参考にした報告記事は参考URLに貼っておきます。

参考URL:http://bugs.sun.com/bugdatabase/view_bug.do?bug_ …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

JREのバージョン等も疑ってみましたが
バグDBの調査が甘かったようです。

載せていただいた
new javax.swing.text.html.parser.ParserDelegator();

をinit直後に追加し、コンパイルを行ったソースで
リロード後もボタン名が表示されることをこちら側でも確認できました。

本当にありがとうございました。

お礼日時:2011/07/07 10:06

JApplet#init() 以外にも、



JApplet#destroy()、JApplet#start()、JApplet#stop()
も実装してみては?

JApplet#start()、JApplet#stop()辺りが、呼び出されているかもしらん。
    • good
    • 0
この回答へのお礼

確かにinit()しかソースにはないので
start()、stop()メソッドを追加し、コンポーネントの後処理(初期化)などを加えましたが
状態は改善しませんでした。

やはり、No.2で回答をいただいた内容の通り、JREのバグのようで
対処を行うと状態は改善されるようになりました。

回答ありがとうございました。

お礼日時:2011/07/07 10:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!