gpt4 book ai didi

java - SWT 方法 - 从表查看器获取值/Swing 方法 - 使用该值

转载 作者:行者123 更新时间:2023-12-01 15:00:25 25 4
gpt4 key购买 nike

我的 SWT 类中有一个方法,可以从表中获取选定的值。该值实际上是对象的文件名。

 public String getPDFFileName() { 
int row = viewer.getTable().getSelectionIndex();
if (row != -1) {
return pdfFileName = AplotSaveDataModel.getInstance().getSelectedPDFFileName(row);
}
else {
MessageDialog.openError(null, "PDF Selection Error Message", "You need to select a PDF to view.");
}
return null;
}

我在同一类中有一个组合,用于桥接 SWT 和 Swing。此方法采用字符串文件名并创建一个显示该文件的 Swing 查看器。

 protected Control createPDFButtons(Composite parent) {
final Composite swtAwtComponent = new Composite(parent, SWT.EMBEDDED);
GridData mainLayoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
mainLayoutData.horizontalSpan = 1;
swtAwtComponent.setLayoutData(mainLayoutData);
GridLayout mainLayout = new GridLayout(1, false);
mainLayout.marginWidth = 0;
mainLayout.marginHeight = 0;
swtAwtComponent.setLayout(mainLayout);
final Frame frame = SWT_AWT.new_Frame(swtAwtComponent);
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

JButton viewerButton = new JButton("View Selected PDF");
viewerButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent actionevent) {

final File viewerFile = new File(getPDFFileName());
final AplotPdfViewer pdfv = new AplotPdfViewer(true);
try {
pdfv.openFile(viewerFile);
}
catch (IOException e) {
e.printStackTrace();
}

}
});

panel.add(viewerButton);
frame.add(panel);
return swtAwtComponent;
}

如果我尝试在组合中运行 getPDFFileName(),则会收到 SWT 线程错误。我明白它的来源。

我不知道如何从 getPDFFileName() 获取值并在最终 FileviewerFile = new File("NEED FILENAME OF SELECTION"); 中使用它;

最佳答案

当您尝试访问小部件(在您的情况下是Table)时,您需要成为UI线程。您可以使用Display.syncExec来做到这一点

  JButton viewerButton = new JButton("View Selected PDF");
viewerButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent actionevent) {
// Retrieve the pdf file name in the UI thread
final String[] filename = new String[1];
Display.getCurrent().syncExec(new Runnable() {
public void run() {
filename[0] = getPDFFileName();
}
}

final File viewerFile = new File(filename[0]);
final AplotPdfViewer pdfv = new AplotPdfViewer(true);
try {
pdfv.openFile(viewerFile);
}
catch (IOException e) {
e.printStackTrace();
}
}
});

如果需要多次,请考虑直接在 getPDFFileName 方法中调用 syncExec。字符串结果保存在数组中,因为您无法使用 syncExec 返回结果。

关于java - SWT 方法 - 从表查看器获取值/Swing 方法 - 使用该值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732544/

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