gpt4 book ai didi

java - 将图像放入 JFace 表单元格导致图像出现在第一列中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:27 25 4
gpt4 key购买 nike

所以我遇到了一个问题,当我将图像添加到 JFace 表的任何列时,第一列的行为也好像其中有图像,并且文本按该图像的大小缩进。

这是一张截图,用生成它所需的代码来说明我的观点。反正有没有办法阻止这种情况发生,因为它真的让我心烦意乱?

问候,

格伦 x

enter image description here

package widgets;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

public class ComponentTest {

private static Image image;

public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, true));

TableViewer viewer1 = getViewer(shell, true);
TableViewer viewer2 = getViewer(shell, false);

List<String> rows = new ArrayList<String>();
rows.add("Row 1");
rows.add("Row 2");

viewer1.setInput(rows);
viewer2.setInput(rows);

shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}

private static TableViewer getViewer(final Shell shell, boolean addImage) {
TableViewer viewer = new TableViewer(shell, SWT.FULL_SELECTION
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.NONE);

viewer.setContentProvider(ArrayContentProvider.getInstance());

viewer.getTable().setLayoutData(
new GridData(SWT.FILL, SWT.FILL, true, true));

TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE);
col.getColumn().setWidth(100);
col.getColumn().setText("Text Column");
col.setLabelProvider(new StyledCellLabelProvider() {
@Override
public void update(ViewerCell cell) {
cell.setText((String) cell.getElement());
}
});

col = new TableViewerColumn(viewer, SWT.NONE);
col.getColumn().setWidth(100);
col.getColumn().setText("Second Text Column");
col.setLabelProvider(new StyledCellLabelProvider() {
@Override
public void update(ViewerCell cell) {
cell.setText((String) cell.getElement());
}
});

if (addImage) {
col = new TableViewerColumn(viewer, SWT.NONE);
col.getColumn().setWidth(100);
col.getColumn().setText("Image Column");
col.setLabelProvider(new StyledCellLabelProvider() {
@Override
public void update(ViewerCell cell) {
cell.setImage(getImage(shell.getDisplay()));
}
});
}
viewer.getTable().setHeaderVisible(true);

return viewer;
}

// make a little green square
private static Image getImage(Display display) {
if (image == null) {
PaletteData palette = new PaletteData(0xFF, 0xFF00, 0xFF0000);
ImageData imageData = new ImageData(16, 16, 24, palette);

for (int x = 0; x < 16; x++) {
for (int y = 0; y < 16; y++) {
imageData.setPixel(x, y, 0xFF00);
}
}
;
image = new Image(display, imageData);
}
return image;
}
}

最佳答案

这是一个很烦人的bug使用 Windows 时。您可以通过跳过第一列(不使用它)并将其宽度设置为零来使用脏修复。

据我记得正确,这会在使用 MacOS 时引入一些小故障。

关于java - 将图像放入 JFace 表单元格导致图像出现在第一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641354/

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