Java SWT方法-从表查看器/Swing方法获取值-使用值
我的SWT类中有一个从表中获取所选值的方法。该值实际上是对象的文件名Java SWT方法-从表查看器/Swing方法获取值-使用值,java,swing,swt,Java,Swing,Swt,我的SWT类中有一个从表中获取所选值的方法。该值实际上是对象的文件名 public String getPDFFileName() { int row = viewer.getTable().getSelectionIndex(); if (row != -1) { return pdfFileName = AplotSaveDataModel.getInstance().getSelectedPDFFileName(row); } else {
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;
}
如果我尝试在组合中运行getPdfielName(),就会得到一个SWT线程错误。我知道这是从哪里来的
我不知道如何从getPdfileName()获取值,并在最终文件viewerFile=new File(“需要选择的文件名”)中使用它 当您尝试访问小部件(在您的例子中是
表
)时,您需要成为一个UI线程。你可以使用
如果需要多次调用,请考虑将对
syncExec
的调用直接放在getPDFFileName
方法中。字符串结果保存在数组中,因为无法使用syncExec
返回结果 我建议您通过添加SelectionChangeListener
来保持对TableViewer
选择的引用
当用户从TableViewer
中选择输入时,您将在选择侦听器中获取事件,并将所选文件名分配给变量
在Swing代码中,使用此(变量)文件名打开Pdf视图。我不建议用Display.async或sync execute调用来混乱Swing代码
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();
}
}
});