可以为text, 也可以为label 添加可以点击的超链接。 代码如下:
package us63740.parts; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.Persist; import org.eclipse.e4.ui.model.application.ui.MDirtyable; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class SamplePart { private Text txtInput; private Label descLabel; private TableViewer tableViewer; private String urlString = "http://www.baidu.com/"; @Inject private MDirtyable dirty; @PostConstruct public void createComposite(Composite parent) { parent.setLayout(new GridLayout(1, false)); txtInput = new Text(parent, SWT.WRAP | SWT.READ_ONLY | SWT.BORDER | SWT.V_SCROLL); txtInput.addMouseListener(new MouseProcesser()); // add listener GridData gd = new GridData(); gd.widthHint = 450; gd.heightHint =100; txtInput.setLayoutData(gd); txtInput.setText(urlString); createLable(parent); tableViewer = new TableViewer(parent); tableViewer.setContentProvider(ArrayContentProvider.getInstance());; tableViewer.setInput(createInitialDataModel()); tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); } private void createLable(Composite parent) { descLabel = new Label(parent, SWT.WRAP | SWT.READ_ONLY | SWT.BORDER | SWT.V_SCROLL); descLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE)); descLabel.setCursor(Display.getCurrent().getSystemCursor(SWT.CURSOR_HAND)); GridData gd = new GridData(); gd.widthHint = 450; gd.heightHint =100; descLabel.setLayoutData(gd); descLabel.setText(urlString); descLabel.addMouseListener(new MouseProcesser()); // add listener } private class MouseProcesser extends MouseAdapter { @Override public void mouseDown(MouseEvent e) { if (e.button == 1) { // 1 = left button clicked, 2 = middle button clicked, 3 = right button clicked. try { Desktop.getDesktop().browse(new URI(urlString)); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } } } @Focus public void setFocus() { tableViewer.getTable().setFocus(); } @Persist public void save() { dirty.setDirty(false); } private List<String> createInitialDataModel() { return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5"); } }