1

次のような単純な MessageDialog (または MessageBox、任意のメソッドでダイアログを開くことができます): MessageDialog.openInformation(shell, "Test", "Get help form this link www.google.com"); www.google.com をハイパーリンクにする方法はありますか? URLをクリックしてブラウザを開きます。

4

1 に答える 1

1

それはすぐには不可能です。これを行うために、MyMessageDialog という名前の独自のクラスを作成しました。

https://gist.github.com/andydunkel/8914008

基本的に MessageDialog のすべてのソース コードです。次に、createMessageArea メソッドを上書きし、ラベルの代わりにリンクを追加し、イベント リスナーを追加しました。

protected Control createMessageArea(Composite composite) {
    // create composite
    // create image
    Image image = getImage();
    if (image != null) {
        imageLabel = new Label(composite, SWT.NULL);
        image.setBackground(imageLabel.getBackground());
        imageLabel.setImage(image);
        //addAccessibleListeners(imageLabel, image);
        GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING)
                .applyTo(imageLabel);
    }
    // create message
    if (message != null) {
        linkLabel = new Link(composite, getMessageLabelStyle());
        linkLabel.setText(message);

        linkLabel.addSelectionListener(new SelectionAdapter(){
            @Override
            public void widgetSelected(SelectionEvent e) {
                   System.out.println("You have selected: "+e.text);
                   try {
                    //  Open default external browser 
                    PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL(e.text));
                  } 
                 catch (PartInitException ex) {
                    // TODO Auto-generated catch block
                     ex.printStackTrace();
                } 
                catch (MalformedURLException ex) {
                    // TODO Auto-generated catch block
                    ex.printStackTrace();
                }
            }
        });

        GridDataFactory
                .fillDefaults()
                .align(SWT.FILL, SWT.BEGINNING)
                .grab(true, false)
                .hint(
                        convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH),
                        SWT.DEFAULT).applyTo(linkLabel);
    }
    return composite;
}

MessageDialog は、HTML コードを使用して呼び出すことができるようになりました。

MyMessageDialog.openError(parent.getShell(), "Hehe", "<a href=\"http://google.com\">Google.com</a> Test");

非常に最適なソリューションではありませんが、機能します。

ここに画像の説明を入力

アンディ

于 2014-02-10T11:47:21.130 に答える