5

これは、Test2 というプロジェクトの test2 というパッケージの Test2.java というファイルにあるコードです。

package test2;

import javax.swing.JFrame;

public class Test2 {
    public static void main(String[] args) {
    JFrame mainWindow = new HtmlWindow("<html>"
            + "<a href=\"http://stackoverflow.com\">"
            + "blah</a></html>");
        mainWindow.setVisible(true);
    }
}

同じパッケージの HtmlWindow.java というファイルにこのコードがあります。

package test2;

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;


class HtmlWindow extends JFrame {
    public HtmlWindow(String refreshGrid) {
        super("blah");
        setSize(300, 100);
        Container content = getContentPane();
        String labelText = refreshGrid;
        JLabel coloredLabel = new JLabel (labelText, JLabel.CENTER); 
        content.add(coloredLabel, BorderLayout.NORTH);

    }

}

プロジェクトを実行すると、予想される場所に「何とか」という単語が表示され、青と下線が引かれますが、単語の上にカーソルを置いてもカーソルが変化せず、クリックしても何も起こりません。

私の質問は次のとおりです。

  • jLabelsにハイパーリンクを配置することは可能ですか?
  • もしそうなら、私は何か間違ったことをしていますか、それともプログラムが正しく実行されていませんか?
  • そうでない場合、良い代替手段は何ですか? 私が JButton を使用しない理由は、最終的には任意の数のハイパーリンクのグリッドを作成したいためであり、ハイパーリンクを画像にしたいのですが、JButton には画像を含めることができますが、ハイパーリンクを「ボタン」のように見えます。編集不可能な JEditorPane を使用できると思いますか?
4

2 に答える 2

4

Swing は完全に機能するブラウザではありません。リンクを含む単純な HTML をサポートしますが、カーソルのスタイルを自動的に変更しません。私の知る限り、プログラムで行う必要があります。つまり、マウスリスナーをラベルに追加し、マウスがラベルの上にあるときにカーソルスタイルを変更します。もちろん、LinkLabelこのロジックを実装する独自のクラスを作成し、必要なときにいつでも使用できます。

于 2012-07-26T12:50:08.393 に答える
3

ハイパーリンクを実行するだけで、通常の Web ブラウザーの動作が得られるとは思えません。オンラインの例によると、通常行われるのはActionListeneronJLabelと callの実装Desktop.getDesktop().browse(new URI("..."));です。

この呼び出しの問題は、すべてのオペレーティング システムで機能するとは限らないことです。あなたができることは、コマンドラインからブラウザでリンクを開くことができるかどうかを確認することです。これができる場合は、クラスのexecメソッドを使用して必要なことを実行できるはずです。Processただし、これはおそらくプラットフォームに依存します。

そうは言っても、テキストを表現するためにラベルを使用する必要があるというのが私の意見です(リンクを見たときに、ユーザーは何が起こるかをある程度知っていると思いますが、この場合、次のように呼び出すことができると思います例外)。トリガーとアクションを実行するコンポーネントが必要な場合は、JButton代わりに a を使用できます。

于 2012-07-26T12:55:45.490 に答える