gpt4 book ai didi

java - SWT 表和超链接小部件集成

转载 作者:行者123 更新时间:2023-11-29 02:57:55 25 4
gpt4 key购买 nike

我与 SWT Table 和 Hyperlink 斗争了太久。我已经阅读了关于 stackoverflow 和 JFace Snippets 以及 Eclipse SWT Snippets 的所有主题,但我找不到问题的答案。

我尝试创建 SWT 表,其中列的每一行都包含“DELETE”超链接。我的问题是我无法让它看起来正常。

也许我会把我的代码放在第一位:

import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
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.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.forms.widgets.Hyperlink;

public class TableWithDelete {

public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

TableColumnLayout tableLayout = new TableColumnLayout();
composite.setLayout(tableLayout);

TableViewer tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL);
Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(false);

TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.BORDER);
TableColumn columnWeight = column.getColumn();
tableLayout.setColumnData(columnWeight, new ColumnWeightData(2, ColumnWeightData.MINIMUM_WIDTH, true));
columnWeight.setText("Name");

column = new TableViewerColumn(tableViewer, SWT.NONE);
columnWeight = column.getColumn();
tableLayout.setColumnData(columnWeight, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true));
columnWeight.setText("Removal");

//fill with some data

String[] sampleNames = new String[]{"Test 1", "Test 2", "Test 3", "Test 4", "Test 5"};

for (String name : sampleNames) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText(0, name);
}

TableItem[] items = table.getItems();
final List<TableEditor> editors = new ArrayList<TableEditor>();
for (int i = 0; i < items.length; i++) {
TableEditor editor = new TableEditor(table);
Hyperlink hyperlink = new Hyperlink(table, SWT.NONE);
hyperlink.setText("DELETE");
hyperlink.pack();
hyperlink.addListener(SWT.MouseDown, new Listener() {

@Override
public void handleEvent(Event event) {
System.out.println("Some action on DELETE");
}
});
editor.minimumWidth = hyperlink.getSize().x;
editor.setEditor(hyperlink, items[i], 1);
editors.add(editor);
}
shell.setSize(300, 200);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

}

我的问题是,如果我运行该代码,我会检索到超链接的丑陋默认外观:

enter image description here

当我将传递给超链接的样式更改为 SWT.TRANSPARENT 时:

Hyperlink hyperlink = new Hyperlink(table, SWT.TRANSPARENT);

表格中的行开始看起来不错,但“透明度”似乎传递给了表格的其他部分,并且由于表格的边框看起来很丑陋:

enter image description here

而且当我将鼠标移到超链接上时,表格的当前行不再突出显示。

我错过了什么?如何使 SWT Table 能够在单元格中显示链接(这不仅看起来像超链接,而且鼠标光标已正确更改)?

如果有任何帮助,我将不胜感激。

最佳答案

你可能想看看

SWT - Tableviewer adding a remove button to a column in the table

按钮使用 Hyperlink

关于java - SWT 表和超链接小部件集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com